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

    xiaoxiao2024-03-20  118

    一些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}

    输出

    1comments

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

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

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

    最新回复(0)