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
view sourceprint?
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
view sourceprint?
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
转载自:http://ifeve.com/java-find-class-fields-with-specified-data-type/