должен быть ненулевым, но помечается как обнуляемый только при использовании лямбды - PullRequest
0 голосов
/ 26 апреля 2018

Я обнаружил странное поведение в sonarqube, и я не знаю, является ли это ошибкой, или я просто недостаточно хорошо разбираюсь в механике лямбд.

В нашей кодовой базе у нас есть такой код:

@Nullable
private Runnable nulltest(@Nullable String myNullableString) {
    if(myNullableString == null) {
        return null;
    }


    return new Runnable() {
        @Override
        public void run() {
            System.out.println("This string is not null: " + myNullableString);
        }
    };
}

и этот код в порядке, sonarqube не имеет проблемы с ним.Но если я изменю код на использование лямбды, например, так:

 @Nullable
 private Runnable nulltest(@Nullable String myNullableString) {
    if(myNullableString == null) {
        return null;
    }

    return () -> System.out.println("This string is not null: " + myNullableString);
}

Тогда я получу следующую ошибку: findbugs: NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE myNullableString должно быть ненулевым, но помечено как Nullable * 100 * * *не понимаю, почему это однажды проблема, а в другой нет.Это ошибка или есть реальная разница между лямбда-версией и анонимной классовой версией этого метода?

1 Ответ

0 голосов
/ 26 апреля 2018

Благодаря Томасу Дженсену, похоже, это действительно ошибка, о которой уже сообщалось спотбагам

https://github.com/spotbugs/spotbugs/issues/552

...