У меня такой класс:
import javax.annotation.Nullable;
public class Nullness {
private @Nullable Object someObject;
public void foo() {
if (someObject != null) {
someObject.toString(); //error "Potential null pointer access: The field someObject is specified as @Nullable"
}
}
}
А когда разрешить нулевой анализ eclipse, ошибка someObject.toString();
в выражении someObject.toString();
который читает Potential null pointer access: The field someObject is specified as @Nullable
.
У Eclipse есть быстрое исправление, которое может изменить мой код так:
public void foo() {
final Object someObject2 = someObject;
if (someObject2 != null) {
someObject2.toString();
}
}
который может уничтожить ошибку, обратите внимание, что на самом деле final
модификатор не требуется, чтобы ошибка исчезла.
Я не понимаю, почему Eclipse не позволяет мне использовать переменную поля непосредственно в if (someObject != null)
но заставляет меня создать дополнительную локальную переменную someObject2
. Это просто ошибка или она предназначена?
Необходимо извиниться перед сообществом, разместив вопрос без тщательного изучения. Эта проблема явно упоминается в этой вики, в которой обсуждается, что использование переменной поля напрямую может вызвать неожиданный эффект несколькими способами.
Nullable
мое 6-е чувство говорит мне, что это вызывает путаницу в компиляторе.someObject2
не@Nullable
, что, кажется, единственная разница между двумя => вот в чем проблемаsomeObject2
@Nullable
но не вызывает никаких ошибок.