我有一个实用程序方法,它遍历各种类并递归检索字段。我想检查该字段是否为Collection。 以下是一些示例代码:
void myMethod(Class<?> classToCheck)
Field[] fields = classToCheck.getDeclaredFields();
for(Field field:fields)
{
// check if field if a Collection<?>
}
提前感谢您的帮助。
答案 0 :(得分:65)
if (Collection.class.isAssignableFrom(field.getType())) {
}
答案 1 :(得分:8)
您应该使用Class.isAssignableFrom
:
if (Collection.class.isAssignableFrom(field.getType())
...
答案 2 :(得分:2)
使用getType()
方法
Field field = ...;
if ( Collection.class.isAssignableFrom( field.getType() ) ){
//do something with your collection
}
答案 3 :(得分:1)
//执行
List<String> cashType = split(" ,AlL ");
if(cashType instanceof Collection){
System.out.println("cashType instanceof Collection");
}else{
System.out.println("cashType is not instanceof Collection");
}
//执行其他
List<String> cashType = split(" ,AlL ");
if(cashType instanceof Hashtable){
System.out.println("cashType instanceof Collection");
}else{
System.out.println("cashType is not instanceof Collection");
}
答案 4 :(得分:0)
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,那么它将是不同的。
答案 5 :(得分:0)
您可以通过以下方式使用getType()
:
if (field.getType().equals(Collection.class) {
// Do something
}
这仅在字段声明为Collection
时才有效。如果字段是Collection的子类型,例如List
或Vector
,则无效。