Не аннотированный параметр переопределяет @ ??? параметр - PullRequest
1 голос
/ 20 июня 2019

При переопределении кода:

    @Override
  public void open(ExecutionContext executionContext) {
    super.open(executionContext);

from: org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader

Я получаю предупреждение IntelliJ:

Не аннотированные переопределения параметров @ ??? параметр меньше ... (Strg + F1) Информация о проверке: Сообщает о проблемах, связанных с использованием аннотаций @Nullable и @NotNull, настроенных при проверке постоянных условий и исключений.

Что я могу сделать, чтобы избежать этого?

1 Ответ

0 голосов
/ 21 июня 2019

Объяснение

Хотя я не могу воспроизвести это на AbstractItemCountingItemStreamItemReader из этого артефакта

    implementation group: 'org.springframework.batch', name: 'spring-batch-core', version: '4.1.2.RELEASE'

, эта аннотация означает, что родительский метод имеет некоторую аннотацию @NotNull / @NonNull для параметра, в то время как метод переопределения имеет нет.

Чтобы исправить это, вам нужно поместить ту же аннотацию в метод переопределения.

Как я уже писал, в версии, которую я скачал, такой аннотации нет, но проверьте источники и скопируйте аннотацию параметров оттуда.

Это предупреждение иногда дает ошибку, поэтому может помочь перезапустить IDEA. Перезапуск помог, когда я попытался написать тривиальный пример для воспроизведения предупреждения.

Тривиальный воспроизводимый пример

Родительский класс:

package com.dpopov.java.stackoverflow;

import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;

public class ParentClass {
    public void nonNullMethod(@NonNull String string) {
        System.out.println("S is: " + string);
    }

    public void nullMethod(@Nullable String string) {
        System.out.println("S is: " + string);
    }
}

Детский класс:

package com.dpopov.java.stackoverflow;

public class NonNullOverride extends ParentClass {

    public static void main(String[] args) {
        NonNullOverride nonNullOverride = new NonNullOverride();
        nonNullOverride.nonNullMethod(null);
        nonNullOverride.nullMethod(null);
    }

    @Override
    public void nonNullMethod(final String string) {
        super.nonNullMethod(string);

        if (string.equals("666")) {
            System.out.println("yes");
        }
    }

    @Override
    public void nullMethod(final String string) {
        super.nullMethod(string);

        if (string == null) {
            System.out.println("I am null, it can be.");
            return;
        }

        if (string.equals("666")) {
            System.out.println("yes");
        }
    }
}
  • Чтобы быть на 100% уверенным, я добавил org.springframework.lang.NonNull и org.springframework.lang.Nullable аннотации к соответствующим Nullable / NonNull аннотациям инспекции Java | Probable bugs | @NotNull/@Nullable problemsFile | Settings | Editor | Inspections). Вы делаете это, нажимая кнопку Configure annotations (см. Скриншот). Cofigure non-null and nullable annotations for IDEA inspections

    • В результате я получил предупреждение о классе ребенка #nonNullMethod: Warning on non-annotated non-null child method argument
    • Особо обратите внимание, что неаннотирующий метод @Nullable не вызывает никаких предупреждений.
    • Предупреждение сработало только после перезапуска IDEA.
    • Вся проверка выглядит довольно глючной, если вы включите / выключите флажки в настройках проверки и попытаетесь воспроизвести их. Итак, снова, перезапуск / аннулирование кэшей может помочь избавиться или показать неправильное предупреждение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...