我使用了一个类,它使我的Hibernate查询通过一个FilterCriterionList (某种查找器)进行,直到现在它一直工作得很完美,并且触发了一个NullPointerException,我完全不知道为什么会触发它。
这是(在ReflectionUtil中)用以下值触发null指针的方法(请注意,抛到它的其他值工作得很好,似乎就是这些值造成了错误):
type =接口java.util.List
fieldName =参数
首先,它抛出NoSuchFieldException,在第二次运行时(在field = getField(type.getSuperclass(),fieldName)上再次调用;)使它抛出一个NullPointerException并停止运行(所有这些都发生在makes中,还不是一个活动环境)。
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;
}对于为什么会发生这种情况有什么想法(或者我能做些什么来解决这个问题?)我不能炫耀更多的代码,因为它是相当复杂的,这是公司代码。
发布于 2011-03-02 09:15:58
java.util.List是一个接口,因此对它调用getSuperclass()会导致null。
递归应用getField()的正确方法如下:
} catch (Exception e) {
Class superclass = type.getSuperclass();
if (superclass != null) {
field = getField(superclass, fieldName);
}
}发布于 2011-03-02 09:16:35
你是这样打电话的:
getField(List.class, "parameter");它永远不会工作,因为List是一个接口,它没有任何称为参数的字段。对于第二个调用,它的‘null’,因为接口列表不具有一个超类。
https://stackoverflow.com/questions/5165406
复制相似问题