Java 反射-继承的字段全部为null或空
我有一个类(带有超类),我想检查它的所有字段是否为NULL,或者如果它是集合,它是否为空。使用以下代码,我可以检查NULL以及它是否为集合,但我似乎无法强制转换集合以检查其大小:Java 反射-继承的字段全部为null或空,java,reflection,Java,Reflection,我有一个类(带有超类),我想检查它的所有字段是否为NULL,或者如果它是集合,它是否为空。使用以下代码,我可以检查NULL以及它是否为集合,但我似乎无法强制转换集合以检查其大小: public static boolean objectIsEmpty(Object object) { for (Class<?> c = object.getClass(); c != null; c = c.getSuperclass()) { Field[] fields =
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;
publicstaticbooleanobjectismpty(Object对象){
对于(类c=object.getClass();c!=null;c=c.getSuperclass()){
Field[]fields=c.getDeclaredFields();
用于(字段:字段){
字段。setAccessible(true);
试一试{
if(field.get(object)!=null){
if(field.getType().equals(List.class)){
//System.err.println(“len”+
//getLength(field.get(object));
}
if(Collection.class.isAssignableFrom(field.getType())){
System.err.println(Collection.class.cast(field.size());
//这里抛出了ClassCastException
}
}
}捕获(非法访问例外e){
//不应与setAccessible一起出现(true),只返回false
//万一
e、 printStackTrace();
返回false;
}
}
}
返回true;
但这会导致java.lang.ClassCastException:无法将java.lang.reflect.Field强制转换为java.util.Collection
如何获取列表的大小?您不能将字段强制转换为集合。您可以将字段对象强制转换为集合。请尝试以下操作:
System.err.println(Collection.class.cast(field.get(object)).size());
无法将字段强制转换为集合。可以将字段对象强制转换为集合。请尝试以下操作:
System.err.println(Collection.class.cast(field.get(object)).size());
哦,上帝,当然。完全有道理。现在我想起来了,非常感谢你的快速反应!哦,上帝,当然。完全有道理现在我想起来了,非常感谢你的快速反应!