我的理解是,如果java对象xx不是null,那么必须有对应的Class
对象,该对象可以使用getClass()
方法获得,但有时这个方法在运行时返回null
,这是非常奇怪的。
示例:
对象(oldFact)是在ExternalFactUpdateDroolsEvent
类中引用的可序列化对象,该调用在执行过程中进行序列化和反序列化,意味着首先将许多ExternalFactUpdateDroolsEvent
类型的对象序列化,然后在执行前进行反灭菌,在此过程中有时oldFact对象返回导致问题的null
Class
对象。
我的问题是,如果一个对象不是null
getClass()
方法如何返回null
?这是否与反序列化对象有关,因为没有正确初始化/实例化或其他原因,这些对象可能从不同的JVM被序列化,然后在一个JVM上执行。
public class ExternalFactUpdateDroolsEvent implements DroolsEvent {
private static final long serialVersionUID = -8225631607832350264L;
private Object oldFact;
public ExternalFactUpdateDroolsEvent(Object oldFact) {
this.oldFact = oldFact;
this.updatedFact = updatedFact;
}
public void executeAction(StatefulKnowledgeSession ksession) {
// some time getClass() returns null that is strange
Class factClass = oldFact.getClass();
........................
}
......................
}
添加更多内容:
我确信oldFact不是空的,因为在oldFact. getclass()上没有nullPointer异常;呼叫类对象factClass被传递给其他mentod,其中断言null异常是抛出的。请参阅下面的代码和异常。我提前感谢你的帮助。
让我猜一下,您在这一行中收到了一个NullPointerException:
Class factClass = oldFact.getClass();
由于事实,getClass()不能返回null (EDIT:即使getClass()将返回null,这不会导致NullPointerException), oldFact必须是一个空
关键是,oldfact是null因为当你在ExternalFactUpdateDroolsEvent
中发送句柄时你发送了一个空指针所以oldfact仍然是一个空对象,所以当你输入oldfact.getclass()
时没有得到
编辑,
或者在调用ExternalFactUpdateDroolsEvent
之前调用executeaction
方法
虽然有点晚了,但我刚刚看到这个搜索同样的答案。private Object oldFact;
不应该初始化为一个新对象吗?
private Object oldFact;
:
private Object oldFact = new Object();