首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReflectionUtil getField throws

ReflectionUtil getField throws
EN

Stack Overflow用户
提问于 2011-03-02 09:12:27
回答 2查看 1.7K关注 0票数 1

我使用了一个类,它使我的Hibernate查询通过一个FilterCriterionList (某种查找器)进行,直到现在它一直工作得很完美,并且触发了一个NullPointerException,我完全不知道为什么会触发它。

这是(在ReflectionUtil中)用以下值触发null指针的方法(请注意,抛到它的其他值工作得很好,似乎就是这些值造成了错误):

type =接口java.util.List

fieldName =参数

首先,它抛出NoSuchFieldException,在第二次运行时(在field = getField(type.getSuperclass(),fieldName)上再次调用;)使它抛出一个NullPointerException并停止运行(所有这些都发生在makes中,还不是一个活动环境)。

代码语言:javascript
复制
public static Field getField(Class type, String fieldName) {
        Field field = null;
        try {
            field = type.getDeclaredField(fieldName);
        } catch (Exception e) {
            if (!type.equals(Object.class)) {
                field = getField(type.getSuperclass(), fieldName);
            }
        }
        return field;
    }

对于为什么会发生这种情况有什么想法(或者我能做些什么来解决这个问题?)我不能炫耀更多的代码,因为它是相当复杂的,这是公司代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-02 09:15:58

java.util.List是一个接口,因此对它调用getSuperclass()会导致null

递归应用getField()的正确方法如下:

代码语言:javascript
复制
} catch (Exception e) {
    Class superclass = type.getSuperclass();
    if (superclass != null) {
        field = getField(superclass, fieldName);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2011-03-02 09:16:35

你是这样打电话的:

代码语言:javascript
复制
getField(List.class, "parameter");

它永远不会工作,因为List是一个接口,它没有任何称为参数的字段。对于第二个调用,它的‘null’,因为接口列表不具有一个超类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5165406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档