[英]java object getClass() method returns null
我的理解是,如果java对象xx不为null,则必须使用getClass()
方法获取该对象的相应Class
对象,但是有时此方法在运行时返回null
却很奇怪。
范例:
对象(oldFact)是可序列化的对象,在ExternalFactUpdateDroolsEvent
类中被称为blew,此调用在执行过程中被序列化和反序列化,这意味着首先对类型为ExternalFactUpdateDroolsEvent
多个对象进行序列化,然后在执行之前对其进行消毒,在此过程中, object返回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不为null,因为oldFact.getClass()上没有nullPointer异常; 调用时,将类对象事实类传递给其他断言,其中断言null就是我们抛出异常的地方。 请参见下面的代码和异常。 非常感谢您的帮助。
让我猜想您在此行中收到NullPointerException:
Class factClass = oldFact.getClass();
由于这个事实,getClass()不能返回null( 编辑:即使getClass()返回null,也不会导致NullPointerException),oldFact必须为null。
整体而言,oldfact为null,因为当您在ExternalFactUpdateDroolsEvent
发送句柄时,您将发送null指针,因此oldfact仍为null对象,因此,当您键入oldfact.getclass()
,没有任何获取
编辑 -
否则,如果您在调用ExternalFactUpdateDroolsEvent
之前调用方法executeaction
,则会发生这种情况
晚会晚了一点,我只是看到了这个寻找同样答案的东西。 不应该private Object oldFact;
初始化为新对象?
private Object oldFact;
至:
private Object oldFact = new Object();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.