我有一个类(带有父类(super class)),我想检查它的所有字段是否为 NULL,或者如果它是一个 Collection,则它是否为空。使用以下代码,我可以检查 NULL 以及它是否是一个集合,但我似乎无法强制转换集合来检查它的大小:
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:无法将 java.lang.reflect.Field 转换为 java.util.Collection
如何获取列表的大小?
最佳答案
您无法将字段转换为集合。您可以将字段对象转换为集合。试试这个:
System.err.println(Collection.class.cast(field.get(object)).size());
关于java - 反射 - 继承的字段全部为 null 或为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607391/