Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反射-继承的字段全部为null或空_Java_Reflection - Fatal编程技术网

Java 反射-继承的字段全部为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 =

我有一个类(带有超类),我想检查它的所有字段是否为NULL,或者如果它是集合,它是否为空。使用以下代码,我可以检查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;
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());

哦,上帝,当然。完全有道理。现在我想起来了,非常感谢你的快速反应!哦,上帝,当然。完全有道理现在我想起来了,非常感谢你的快速反应!