java - 反射 - 继承的字段全部为 null 或为空

标签 java reflection

我有一个类(带有父类(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/

相关文章:

java - 连接sql数据库问题

java - 找不到 com.microsoft.sqlserver.jdbc.SQLServerDriver 错误

java - 如何在 Java EE 应用程序中使用丰富的 header 将请求代理到另一个位置

java - 编写一个方法 cut(LinkList x),将列表 x 分成两个(大致)相等的两半,并将后半部分放在前半部分的前面

java - 使用反射启动 JavaFX 项目

java - 使用 javaCompiler 从包含 java 程序中的 java 代码的编译字符串中获取返回值

c++ - 运行时访问图书管理员类?

c# - 为什么 `Assembly` 和 `Module` 没有公开定义的构造函数?

scala - 从 String 创建 typeTag 并将其传递给多态方法

Java创建具有深度空对象的实例