У меня есть класс (с суперклассом), для которого я хочу проверить, что все поля либо NULL, либо если это коллекция, то она пуста. С помощью следующего кода я могу проверить NULL и является ли это коллекция, но я не могу бросить коллекции, чтобы проверить его размер:Reflection - унаследованные поля все пустые или пустые
public static boolean objectIsEmpty(Object object) {
for (Class<?> c = object.getClass(); c != null; c = c.getSuperclass()) {
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
try {
if (field.get(object) != null) {
if (field.getType().equals(List.class)) {
// System.err.println("len " +
// Array.getLength(field.get(object)));
}
if (Collection.class.isAssignableFrom(field.getType())) {
System.err.println(Collection.class.cast(field).size());
// ClassCastException thrown here
}
}
} catch (IllegalAccessException e) {
// Should not occur with setAccessible(true), return false just
// in case
e.printStackTrace();
return false;
}
}
}
return true;
Но это приводит к java.lang.ClassCastException: Не удается cast java.lang.reflect.Field to java.util.Collection
Как получить размер списков?
О, боже, конечно. В настоящее время я думаю об этом, спасибо за быстрый ответ! – CounterFlame
Добро пожаловать :) –