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 }

输出

1 comments

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

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

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

时间: 2024-10-24 00:29:48

Java – 获取类中特定数据类型的字段的相关文章

Java获取代码中方法参数名信息的方法_java

前言 大家都知道随着java8的使用,在相应的方法签名中增加了新的对象Parameter,用于表示特定的参数信息,通过它的getName可以获取相应的参数名.即像在代码中编写的,如命名为username,那么在前台进行传参时,即不需要再编写如@Parameter("username")类的注解,而直接就能进行按名映射. 如下的代码参考所示: public class T { private interface T2 { void method(String username, Stri

如何获取oracle中某表的字段类型。

问题描述 如何获取oracle中某表的字段类型. 解决方案 使用JDBC就可以的// 获取数据库的连接这些操作我就省了PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM H_TEST");ResultSet rs = pstmt.executeQuery();ResultSetMetaData rsmd = rs.getMetaData(); //获取字段名if(rsmd != null){ int count

android如何获取网页中特定标记之间的代码并作为字符串返回?

问题描述 android如何获取网页中特定标记之间的代码并作为字符串返回? 比如 我要获取某个网页上fhh jkl 这两个标记之间的代码 并返回该怎么弄? 解决方案 正则表达式提取 (?<=fhh).*?(?<jkl) 解决方案二: 除了用正则之外你也可以用Jsoup提取

Java 获取类成员方法信息

一.基本的数据类型,void关键字等都存在类类型 Class c = 基类.class (int,String,double,void等) Class c1 = int.class; int的类类型 Class c2 = String.class; String类的类类型 String类字节码 Class c3 = double.class; double这个数据类类型的字节码表示方式 Class c4 = Double.class; Double这个类的类类型字节码表示方式 Class c5

JS正则表达式获取字符串中特定字符的方法

 这篇文章主要介绍了JS正则表达式获取字符串中得特定字符,通过replace的回调函数获取,需要的朋友可以参考下 实现的效果:在字符串中abcdefgname='test'sddfhskshjsfsjdfps中获取name的值test    实现的机制:通过replace的回调函数获取.    代码:  代码如下: var str = "abcdefgname='test'sddfhskshjsfsjdfps";  var reg = /name='((w|-|s)+)/ig;  st

Java Math 类中的新功能,第 1 部分: 实数

有时候您会对一个类熟悉到忘记了它的存在.如果您能够写出 java.lang.Foo 的文档, 那么 Eclipse 将帮助您自动完成所需的函数,您无需阅读它的 Javadoc.例如,我使用 java.lang.Math(一个我自认为非常了解的类)时就是这样,但令我吃惊的是,我最近偶然 读到它的 Javadoc -- 这可能是我近五年来第一次读到,我发现这个类的大小 几乎翻了一倍,包含 20 种我从来没听说过的新方法.看来我要对它另眼相看了. Java 语言规范第 5 版向 java.lang.M

Java数据类型和MySql数据类型对应表

java mysql 数据类型对照 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N CHAR java.lang.String 1   BLOB L+N BLOB java.lang.byte[] -4   TEXT 65535 VARCHAR java.lang.String -1               INTEGER 4 INTEGE

使用Java获取html中Select,radio多选的值方法_java

复制代码 代码如下: //jsp中的select多选代码<select name="selectvalues" size="4" multiple="multiple">  <option value="volvo">Volvo</option>  <option value="saab">Saab</option>  <option val

Java Math 类中的新功能,第 2 部分: 浮点数

Java 语言规范第 5 版向 java.lang.Math 和 java.lang.StrictMath 添加了 10 种新方法,Java 6 又添加了 10 种.这个共两部分的系列文章的 第 1 部分 介绍了很有意 义的新的数学方法.它提供了在还未出现计算机的时代中数学家比较熟悉的函数.在第 2 部 分中,我主要关注这样一些函数,它们的目的是操作浮点数,而不是抽象实数. 就像 我在 第 1 部分中 提到的一样,实数(比如 e 或 0.2)和它的 计算机表示(比如 Java double)之间