Почему нулевой анализ Eclipse игнорирует оператор проверки нуля: if (someObject! = Null) {…}, когда someObject является переменной области видимости?

1

У меня такой класс:

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. Это просто ошибка или она предназначена?

  • 0
    Без моего знания о Nullable мое 6-е чувство говорит мне, что это вызывает путаницу в компиляторе. someObject2 не @Nullable , что, кажется, единственная разница между двумя => вот в чем проблема
  • 0
    @hewo Я также пытаюсь пометить someObject2 @Nullable но не вызывает никаких ошибок.
Показать ещё 1 комментарий
Теги:
null

1 ответ

0
Лучший ответ

Необходимо извиниться перед сообществом, разместив вопрос без тщательного изучения. Эта проблема явно упоминается в этой вики, в которой обсуждается, что использование переменной поля напрямую может вызвать неожиданный эффект несколькими способами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню