Метод getClass () объекта Java возвращает ноль - PullRequest
1 голос
/ 30 октября 2011

Насколько я понимаю, если 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 не является нулевым, поскольку нет исключений nullPointer для oldFact.getClass (); вызов, класс objecr factClass передается в другой метод, где утверждается значение null, это где мы исключение бросает. Смотрите код и исключение, как показано ниже. Я заранее ценю вашу помощь.

Ответы [ 3 ]

10 голосов
/ 30 октября 2011

Позвольте мне предположить, что вы получаете NullPointerException в этой строке:

Class factClass = oldFact.getClass();

В связи с тем, что getClass () не может вернуть ноль ( EDIT: , даже если getClass() вернет ноль, что не приведет к исключению NullPointerException), oldFact должен быть нулем.

0 голосов
/ 29 декабря 2016

Хотя я немного опоздал на вечеринку, я только что видел, что искал те же ответы.Разве private Object oldFact; не должен быть инициализирован как новый объект?

private Object oldFact;

до:

private Object oldFact = new Object();
0 голосов
/ 08 декабря 2012

Суть в том, что oldfact is null, потому что когда вы отправляете дескриптор в ExternalFactUpdateDroolsEvent, вы отправляете нулевой указатель, так что oldfact остается пустым объектом, поэтому, когда вы набираете oldfact.getclass(), нечего получить

редактировать -

или это происходит, если вы вызываете метод executeaction перед вызовом ExternalFactUpdateDroolsEvent

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...