美文网首页
java反射获取本类和父类所有字段

java反射获取本类和父类所有字段

作者: 拄杖忙学轻声码 | 来源:发表于2021-09-29 22:58 被阅读0次

    说明:

    1、getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。
    2、getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。
    3、同样类似的还有getConstructors()和getDeclaredConstructors()、getMethods()和getDeclaredMethods(),这两者分别表示获取某个类的方法、构造函数。

    获取父类所有字段:
    要获取到当前类以及父类的所有属性,怎么办?

    /*
     * Copyright (C) 2013 SHANGHAI VOLKSWAGEN, All rights reserved.
     * License version 1.0, a copy of which has been included with this.
     * @File  name:com.hkl.modules.utils.AnnotationUtil
     * @Create  on:2021/9/29
     * @Author:hkl
     */
    package com.hkl.modules.utils;
     
    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
     
    /**
     * <p>ClassName:AnnotationUtil</p >
     * <p>Description:注解工具</p >
     * <p>Author:hkl</p >
     * <p>Date:2021/9/29</p >
     */
    public class AnnotationUtil {
     
        /**
         * 获取本类及其父类的字段属性
         * @param clazz 当前类对象
         * @return 字段数组
         */
        public static Field[] getAllFields(Class<?> clazz) {
            List<Field> fieldList = new ArrayList<>();
            while (clazz != null){
                fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
                clazz = clazz.getSuperclass();
            }
            Field[] fields = new Field[fieldList.size()];
            return fieldList.toArray(fields);
        }
     
    }
    

    测试:

        public static void main(String[] args) {
            DtoClass dtoClass = new DtoClass();
    
            Field[] allFields = AnnotationUtil.getAllFields(dtoClass.getClass());
            System.out.println("------------------------------------------");
            for (Field allField : allFields) {
                System.out.println("allField = " + allField.getName());
            }
        }
    

    相关文章

      网友评论

          本文标题:java反射获取本类和父类所有字段

          本文链接:https://www.haomeiwen.com/subject/sfesnltx.html