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}

输出

1comments

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值