我的理解是,如果java对象xx不为null,那么该对象必须有对应的Class
对象才能使用getClass()
方法,但有时这个方法返回null
at运行时很奇怪。
示例:
对象(oldFact)是ExternalFactUpdateDroolsEvent
类中引用的可序列化对象,它在执行过程中被序列化并保存,这意味着第一个ExternalFactUpdateDroolsEvent
类型的对象被序列化,后者在执行之前得到去除,在这个过程中,oldFact对象返回导致问题的null
Class
对象。
我的问题是,如果某个对象不是null
getClass()
方法如何返回null
?这是否与deserilized对象有关,如果没有正确初始化/实例化或其他一些东西,这些对象可能会从不同的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不为null,因为oldFact.getClass()上没有nullPointer异常;呼叫, 类objecr factClass正被传递给其他的声明,其中null被声明为 我们例外的地方是扔。请参阅下面的代码和例外。 我提前感谢您的帮助。
答案 0 :(得分:10)
让我猜你在这一行收到NullPointerException:
Class factClass = oldFact.getClass();
由于事实,getClass()不能返回null(编辑:即使getClass()将返回null,这不会导致NullPointerException),oldFact必须是一个这是空的。
答案 1 :(得分:0)
重点是,oldfact为null,因为当您在ExternalFactUpdateDroolsEvent
中发送句柄时,您发送一个空指针,因此oldfact仍然是一个空对象,因此当您键入oldfact.getclass()
时,无法获取< / p>
编辑 -
如果您在调用executeaction
ExternalFactUpdateDroolsEvent
,则会发生这种情况
答案 2 :(得分:0)
Altough有点晚了,我只是看到了这个搜索相同的答案。不应该private Object oldFact;
初始化为新对象吗?
private Object oldFact;
为:
private Object oldFact = new Object();