Java:如何检查Field是否为java.util.Collection类型
我有一个实用程序方法,遍历各种类并递归检索字段。 我想检查该字段是否为Collection。 以下是一些示例代码:
void myMethod(Class classToCheck) Field[] fields = classToCheck.getDeclaredFields(); for(Field field:fields) { // check if field if a Collection }
在此先感谢您的帮助。
if (Collection.class.isAssignableFrom(field.getType())) { }
你应该使用Class.isAssignableFrom
:
if (Collection.class.isAssignableFrom(field.getType()) ...
使用getType()
方法
Field field = ...; if ( Collection.class.isAssignableFrom( field.getType() ) ){ //do something with your collection }
您可以通过以下方式使用getType()
:
if (field.getType().equals(Collection.class) { // Do something }
这仅在字段声明为Collection
时才有效。 如果该字段是Collection的子类型(例如List
或Vector
,则它将不起作用。
for(Field field:fields) { // check if field if a Collection Object myInstance = field.get(classInstance); // where classInstance is the instance in which the fields is stored if(myInstance instanceof Collection) { //Do your thing } }
这将测试字段’field’(对象classInstance)引用的实际对象是否实现Collection。 如果要测试声明的Field类型是否实现Collection,那么这将是不同的。
//这执行if
List cashType = split(" ,AlL "); if(cashType instanceof Collection){ System.out.println("cashType instanceof Collection"); }else{ System.out.println("cashType is not instanceof Collection"); }
//这会执行其他操作
List cashType = split(" ,AlL "); if(cashType instanceof Hashtable){ System.out.println("cashType instanceof Collection"); }else{ System.out.println("cashType is not instanceof Collection"); }
- com.mchange.v2.resourcepool.CannotAcquireResourceException:ResourcePool无法从其主工厂或源获取资源
- 是什么让线程的执行顺序变得不可预测?
- 如何使用WTK 3.0在Mac OS X上启动两个J2ME Midlet。
- Java中inheritance的坏例子是什么?
- 为什么无法锁定ConcurrentHashMap进行独占访问?
- MongoDB全文搜索索引:错误:文本索引太多,为什么?
- 按相反顺序排序列表
- 如何在pom.xml中添加\ install到新创建的\第三方jar的maven依赖项
- 如何使用java rdf4j将RDF转换为漂亮的嵌套JSON