java对象getClass()方法返回null



我的理解是,如果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();

相关内容

  • 没有找到相关文章

最新更新