Я обнаружил странное поведение в 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 * * *не понимаю, почему это однажды проблема, а в другой нет.Это ошибка или есть реальная разница между лямбда-версией и анонимной классовой версией этого метода?