获取类的属性有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.
发表评论