一些Java反射API的例子。
1.显示所有字段和数据类型
使用反射遍历一个类声明的所有字段。
CompanyA.java
01 | package com.mkyong.test; |
03 | import java.util.List; |
07 | public class CompanyA { |
11 | List<String> comments; |
13 | Map<String, String> extra; |
使用Java反射APIs getDeclaredFields()去遍历和打印字段名和数据类型。
Test.java
01 | package com.mkyong.test; |
03 | import java.lang.reflect.Field; |
04 | import java.util.List; |
08 | public static void main(String[] args) { |
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); |
输出
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; |
03 | import java.lang.reflect.Field; |
04 | import java.util.ArrayList; |
05 | import java.util.List; |
07 | public class TestAbc { |
09 | public static void main(String[] args) { |
11 | List<String> list = getFieldNameWithListDataType(); |
12 | for (String data : list){ |
13 | System.out.println( "List : " + data); |
18 | private static List<String> getFieldNameWithListDataType(){ |
20 | List<String> result = new ArrayList<>(); |
23 | Field[] fields = CompanyA. class .getDeclaredFields(); |
24 | for (Field f : fields){ |
27 | if (f.getType().equals(List. class )){ |
28 | result.add(f.getName()); |
输出
Note
对于一些基本数据类型像int,你可以对比一下使用int.class或Integer.TYPE。
References
1.Oracle : Java Reflection examples
2.Oracle : Class – getDeclaredFields Javadoc
转载自 并发编程网 - ifeve.com