Java 反射获取类的属性和父类的属性 |
您所在的位置:网站首页 › java反射获取对象属性和值 › Java 反射获取类的属性和父类的属性 |
定义两个类Person是父类,Student是子类 public class Person { private String username; private String grade; } public class Student extends Person { private String sex; }通过反射分别获取父类和子类的属性 public class ReflectTest { public static void main(String[] args) throws Exception { Field[] declaredFields = Person.class.getDeclaredFields(); for (Field f : declaredFields) { System.out.println("父类的属性:" + f.getName()); } System.out.println("--------------"); Field[] declaredFields1 = Student.class.getDeclaredFields(); for (Field f : declaredFields1) { System.out.println("子类的属性:" + f.getName()); } System.out.println("---------"); }如果想要通过属性名去获取类的属性 Field f=Student.class.getDeclaredField("sex");如果想要通过子类获取父类的所有属性 /** * * 反射通过子类遍历父类的属性 * */ Class clazz = Student.class; List fieldsList = new ArrayList(); while (clazz != null) { // 遍历所有父类字节码对象 Field[] declaredFields2 = clazz.getDeclaredFields(); fieldsList.addAll(Arrays.asList(declaredFields2)); //将`Filed[]`数组转换为`List`然后再将其拼接至`ArrayList`上 clazz = clazz.getSuperclass(); // 获得父类的字节码对象 } for (Object field : fieldsList) { // 打印当前类以及其父类的多有属性对象 System.out.println(field); }如果子类没有的属性从父类获取 public class ReflectTest2 { public static void main(String[] args) { Student student = new Student(); Field username = null; username = getDeclareField(student, "username"); System.out.println(username); } public static Field getDeclareField(Object o, String fieldName) { Field field = null; Class clazz = o.getClass(); System.out.println(clazz != Object.class); for (;field==null; clazz = clazz.getSuperclass()) { try { field = clazz.getDeclaredField(fieldName); } catch (NoSuchFieldException e) { //e.printStackTrace(); } } return field; } }参考:https://blog.csdn.net/weixin_38167855/article/details/99648823 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |