我是靠谱客的博主 迷你皮带,这篇文章主要介绍JAVA通过反射获取类和父类的属性和属性值,现在分享给大家,希望可以做个参考。

通过反射我们可以获取到一个类的属性和方法,但获取父类的private的属性却不可以直接获取,需要递归调用superclass来获取属性

SuperClass.java

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class SuperClass {       private String name;     private String age;     private Date birthday;       public String getName() {         return name;     }       public void setName(String name) {         this.name = name;     }       public String getAge() {         return age;     }       public void setAge(String age) {         this.age = age;     }       public Date getBirthday() {         return birthday;     }       public void setBirthday(Date birthday) {         this.birthday = birthday;     }   }


SubClass.java

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
public class SubClass extends SuperClass {     private String sid;       public String getSid() {         return sid;     }       public void setSid(String sid) {         this.sid = sid;     }   }

SubSubClass.java

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
public class SubSubClass extends SubClass {     private String grade;       public String getGrade() {         return grade;     }       public void setGrade(String grade) {         this.grade = grade;     }   }

保存属性和属性值
SensorData.java

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class SensorData {     private String  sensorId;     private Object sensorValue;       public String getSensorId() {         return sensorId;     }       public void setSensorId(String sensorId) {         this.sensorId = sensorId;     }       public Object getSensorValue() {         return sensorValue;     }       public void setSensorValue(Object sensorValue) {         this.sensorValue = sensorValue;     }       @Override     public String toString() {         return "SensorData [sensorId=" + sensorId + ", sensorValue=" + sensorValue + "]";     }           }

TestRe.java 测试类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class TestRe {          public static void main(String[] args) {         SuperClass cla =new SubSubClass();         //SuperClass cla =new SubClass();                  List<SensorData>  s = sensorDataList(cla);         for(SensorData ss :s){             System.out.println(ss);         }     }          /**      * 通过反射获取各个属性名称和属性值封装成类      *       * @param sensorDataDto      * @return      */     public static List<SensorData> sensorDataList(Object sensorDataDto) {         List<SensorData> sensorDatas = new ArrayList<SensorData>();         Class<?> clazz = sensorDataDto.getClass();         try {             exceClass(sensorDataDto, sensorDatas, clazz);         } catch (Exception e) {           }         return sensorDatas;     }       private static void exceClass(Object sensorDataDto, List<SensorData> sensorDatas, Class<?> clazz) throws Exception {         if (clazz != Object.class) {             System.out.println(clazz);             returnclassF(sensorDataDto, sensorDatas, clazz);             Class<?> clazzs = clazz.getSuperclass();             exceClass(sensorDataDto, sensorDatas, clazzs);         }     }       private static void returnclassF(Object sensorDataDto, List<SensorData> sensorDatas, Class<?> clazz) throws Exception {         Field[] fields = clazz.getDeclaredFields();         for (Field field : fields) {             field.setAccessible(true);             SensorData sensorData = new SensorData();             sensorData.setSensorId(field.getName().toString());             sensorData.setSensorValue(field.get(sensorDataDto));             sensorDatas.add(sensorData);         }     } }


通过

复制代码
1
2
3
4
5
6
7
8
class com.ref.SubSubClass class com.ref.SubClass class com.ref.SuperClass SensorData [sensorId=grade, sensorValue=null] SensorData [sensorId=sid, sensorValue=null] SensorData [sensorId=name, sensorValue=null] SensorData [sensorId=age, sensorValue=null] SensorData [sensorId=birthday, sensorValue=null]


通过多态可以获取不同类的属性和值

复制代码
1
2
3
4
5
6
class com.ref.SubClass class com.ref.SuperClass SensorData [sensorId=sid, sensorValue=null] SensorData [sensorId=name, sensorValue=null] SensorData [sensorId=age, sensorValue=null] SensorData [sensorId=birthday, sensorValue=null]

 

最后

以上就是迷你皮带最近收集整理的关于JAVA通过反射获取类和父类的属性和属性值的全部内容,更多相关JAVA通过反射获取类和父类内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(96)

评论列表共有 0 条评论

立即
投稿
返回
顶部