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/