FindBugs: возможное разыменование нулевого указателя

Привет, у меня есть следующий метод:

protected boolean shouldCheckLimit() {
    if (startDate == null || endDate == null) {
        return true;
    }
    final Long currentTime = System.currentTimeMillis();
    if (startDate <= currentTime && currentTime < endDate) {
        return true;
    }
    return false;
}

Проблема в том, что findBugs обнаружил следующую проблему:

Possible null pointer dereference of TimeIntervalLimit.startDate in com.bet.blues.limit.TimeIntervalLimit.shouldCheckLimit() [Scary(8), Normal 

Я должен упомянуть, что startDate и endDate являются переменными типа Long. Я пытался добавить проверки на null внутри условия if, также я пытался использовать метод longValue(), но безрезультатно. У вас есть идеи, как я могу решить эту проблему? Может быть ошибка на стороне fndBugs?


person lucian.marcuta    schedule 07.07.2015    source источник
comment
Почему бы вам не отправить startDate и endDate в качестве параметров? shouldCheckLimit(long startDate, long endDate){}   -  person Uma Kanth    schedule 07.07.2015
comment
Может быть ошибка на стороне fndBugs? Маловероятно, но select не т сломан. Мне трудно поверить, что вы получаете эту ошибку с кодом выше, возможно, вы получили ошибку с более ранней версией кода?   -  person T.J. Crowder    schedule 07.07.2015
comment
Это может быть обходной путь, но почему бы вам не использовать тип данных long вместо типа объекта Long?   -  person davidgiga1993    schedule 07.07.2015
comment
(Просто интересно, почему люди думают, что возможное разыменование нулевого указателя полезно проверять? Похоже, это добавляет гораздо больше шума, чем сигнала)   -  person user253751    schedule 07.07.2015
comment
Ваши startDate и endDate являются глобальными переменными. Что-нибудь может случиться с ними (включая получение nullify) при получении currentTime? Попробуйте предложение @UmaKanth и посмотрите, исправит ли оно это.   -  person Rosdi Kasim    schedule 07.07.2015


Ответы (1)


Вы получаете сообщение об ошибке, потому что startDate (а также endDate) может быть null. Но вы проверили их на null, так что это невозможно, верно?

Ответ заключается в том, что оба являются глобальными и могут быть установлены в null в любое время другим потоком.

person Axel    schedule 07.07.2015