作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服
Java – 获取类中特定数据类型的字段

Custom Tab

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

Home