2015-05-17 3 views
1

Может быть, это обсуждалось много раз. Но я не понимаю, как @ javax.annotation.nullable и notnull работает в Eclipse. У меня есть код ниже в eclipse.Проблема с затмением: Потенциальный нулевой нулевой анализ

if(null != getApplicant()){ 
    name = getApplicant().getName(); //Potential null pointer access 
} 

В котором getApplication() аннотируется с помощью @Nullable.

В приведенном выше коде я проверил против null перед его доступом. Но, все же, я получаю ошибку здесь от компилятора. Тот же код отлично работает Intellij. (Большинство разработчиков в моей команде используют это :().

Просьба сообщить мне, как я могу получить это @ javax.annotation.Nullable и @ javax.annotation.Notnull работал в eclipse аналогично Intellij. хочу изменить мою IDE только для этого другого поведения.

ответ

2

У компилятора нет уверенности в том, что вызов getApplication() второй раз возвращает результат, отличный от нуля, как и в первый раз. Храните его в локальном для теста, а затем используйте это в блоке if.

+0

Я не понимаю вашу точку здесь. Я уже подтвердил, если условие .. правильно? Тогда, почему во второй раз нет гарантии для нарушителя. Это тот же объект, я пытаюсь получить доступ в обоих местах. Я что-то пропустил здесь? – IamSan

+0

Нет, вы подтвердили первый результат, а затем используете второй результат. – nitind

+0

Я верю, что в обоих местах результат будет таким же. Тогда почему? Вы хотите сказать, что другой поток может изменить этот объект между этими вызовами? но он не является статичным. Пожалуйста, уточните меня. – IamSan

1

Eclipse предупреждает вас, что доступ к второму методу может потенциально вернуть значение null. Пример кода для воспроизведения nullpointer:

public class A { 
int numberCalls; 
Applicant getApplicant() { 
if (numberCalls++ > 3) 
    return null; 
else 
    return new Applicant(); 
} 
} 

Я хотел бы предложить, чтобы реализовать свой вызов, как это:

Applicant applicant = getApplicant(); 
if(null != applicant){ 
    name = applicant.getName(); //not anymore Potential null pointer access 
}