Java反射获取对象全部属性,包括父类属性

2019-08-26 17:57:39  阅读 13918 次 评论 0 条

获取类的属性有getFields和getDeclaredFields两个方法,简要说下两者区别:

  • getFields 可以获取当前类及父类的所有public 属性,protect和private无法获取

  • getDeclaredFields 可以获取到当前类所有的public、protect、private属性

所以,要实现此功能只能使用getDeclaredFields。

当前类取完了,再class.getSuperclass找到父类,完了再爷爷类……

public void printAllMembers(Object obj){
    Class cls = obj.getClass();
    while (cls != null && cls != Object.class){

        Field[] fields = cls.getDeclaredFields();
        for (Field fd : fields) {
            if (!fd.isAccessible()) {
                fd.setAccessible(true);
            }

            try {
                Log.d("bg", fd.getName() + ": " + fd.get(obj));
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        cls = cls.getSuperclass();
    }

    Log.d("bg", "=====the end=====");
}

由于private不允许直接访问,需要调下setAccessible,否则会报错Method threw 'java.lang.IllegalAccessException' exception.

本文地址:http://bloguan.com/?id=542
版权声明:本文为原创文章,版权归 博观网 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?