Ответ 1
if (Collection.class.isAssignableFrom(field.getType())) {
}
У меня есть метод утилиты, который проходит через различные классы и рекурсивно извлекает поля. Я хочу проверить, является ли это поле 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
}
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. Если вы хотите проверить, будет ли объявленный тип поля обладать коллекцией, это будет другим.
Вы можете использовать getType()
следующим образом:
if (field.getType().equals(Collection.class) {
// Do something
}
Это будет работать, только если поле объявлено как Collection
. Он не будет работать, если поле является подтипом коллекции, например List
или Vector
.
//Выполняется, если
List<String> cashType = split(" ,AlL ");
if(cashType instanceof Collection){
System.out.println("cashType instanceof Collection");
}else{
System.out.println("cashType is not instanceof Collection");
}
//Выполняет else
List<String> cashType = split(" ,AlL ");
if(cashType instanceof Hashtable){
System.out.println("cashType instanceof Collection");
}else{
System.out.println("cashType is not instanceof Collection");
}