反射获取本类和父类所有属性

反射获取本类和父类所有属性

  1. getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。

  2. getDeclaredFields():获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段。

  3. 同样类似的还有getConstructors()和getDeclaredConstructors()、getMethods()和getDeclaredMethods(),这两者分别表示获取某个类的方法、构造函数。

那么问题来了,我要获取到当前类以及父类的所有属性,怎么办?

    /**
     * 获取本类及其父类的属性的方法
     * @param clazz 当前类对象
     * @return 字段数组
     */
    private 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) {
        Student student = new Student();
        student.setStuClass("18001");
        student.setStuNum("19800101");
        student.setName("Tom");
        student.setAge("20");

        Class<? extends Student> clazz = student.getClass();
        Field[] fields = getAllFields(clazz);
        for (Field field : fields) {
            System.out.println(field.getName());
        }
    }

【参考】:https://www.cnblogs.com/JackZed/p/6888668.html

posted @ 2019-12-09 13:38  会当临绝顶forever  阅读(...)  评论(...编辑  收藏