阅读776 返回首页    go 阿里云 go 技术社区[云栖]


Java – 获取类中特定数据类型的字段

一些Java反射API的例子。

1.显示所有字段和数据类型

使用反射遍历一个类声明的所有字段。

CompanyA.java
01 package com.mkyong.test;
02  
03 import java.util.List;
04 import java.util.Map;
05 import java.util.Set;
06  
07 public class CompanyA {
08  
09     String orgName;
10     int count;
11     List<String> comments;
12     Set<String> branches;
13     Map<String, String> extra;
14  
15     //...
16 }

使用Java反射APIs getDeclaredFields()去遍历和打印字段名和数据类型。

Test.java
01 package com.mkyong.test;
02  
03 import java.lang.reflect.Field;
04 import java.util.List;
05  
06 public class Test {
07  
08     public static void main(String[] args) {
09  
10         Field[] fields = CompanyA.class.getDeclaredFields();
11         for(Field f : fields){
12             Class t = f.getType();
13             System.out.println("field name : " + f.getName() + " , type : " + t);
14         }
15  
16     }
17  
18 }

输出

1 field name : orgName , type :class java.lang.String
2 field name : count , type :int
3 field name : comments , type :interface java.util.List
4 field name : branches , type :interface java.util.Set
5 field name : extra , type :interface java.util.Map

2.获取指定数据类型的字段

下面的例子会获取所有List类型的字段。

Test.java
01 package com.mkyong.test;
02  
03 import java.lang.reflect.Field;
04 import java.util.ArrayList;
05 import java.util.List;
06  
07 public class TestAbc {
08  
09     public static void main(String[] args) {
10  
11         List<String> list = getFieldNameWithListDataType();
12         for(String data : list){
13             System.out.println("List : " + data);
14         }
15  
16     }
17  
18     private static List<String> getFieldNameWithListDataType(){
19  
20         List<String> result = new ArrayList<>();
21  
22         //CompanyA, refer 1.1
23         Field[] fields = CompanyA.class.getDeclaredFields();
24         for(Field f : fields){
25  
26             // use equals to compare the data type.
27             if(f.getType().equals(List.class)){
28                 result.add(f.getName());
29             }
30  
31             //for other data type
32  
33             //Map
34             //if(f.getType().equals(Map.class))
35  
36             //Set
37             //if(f.getType().equals(Set.class))
38  
39             //primitive int
40             //if(f.getType().equals(int.class))
41             //if(f.getType().equals(Integer.TYPE))
42  
43             //primitive long
44             //if(f.getType().equals(long.class))
45             //if(f.getType().equals(Long.TYPE))
46  
47         }
48  
49         return result;
50  
51     }
52  
53 }

输出

1 comments

Note
对于一些基本数据类型像int,你可以对比一下使用int.class或Integer.TYPE。

References
1.Oracle : Java Reflection examples
2.Oracle : Class – getDeclaredFields Javadoc

转载自 并发编程网 - ifeve.com

最后更新:2017-05-19 15:02:52

  上一篇:go  《ELK Stack权威指南 》导读
  下一篇:go  我们的垃圾收集器