Предположим, у меня есть метод для анализа числа, чей контракт обнуляемости возвращаемого значения должен быть выведен из его аргумента:
@...
public static Integer tryParse(@Nullable final String in, @... final Integer defaultValue) {
if ( in == null ) {
return defaultValue;
}
@Nullable
final Integer out = Ints.tryParse(in); // from Google Guava, does not accept nulls
if ( out == null ) {
return defaultValue;
}
return out;
}
, где отметки @...
означают некоторый переход обнуляемости. Имея это, у меня также будет что-то вроде:
final int n = tryParse("foo", 0)
(безопасно во всех случаях: n
считается никогда не имеющим null
, поэтому распаковка не вызовет NullPointerException
) @Nullable final Integer n = tryParse("foo", null)
(безопасно: обе руки не обращают внимания на ноль) final int n = tryParse(someVar, null)
(небезопасно: может вызвать NPE, если someVar
не является допустимым представлением строки int).
Есть ли способ связать возвращаемое значение Nullability в зависимости от аргумента, передаваемого Nullability параметра метода, или я должен просто создать перегрузку с четко разделенными в штучной упаковке и примитивными значениями по умолчанию (это может быть хорошо для в данном случае, но примитивные типы - не единственная ситуация, которую я хотел бы обработать)?
Если это имеет значение: я не использую инструменты анализа stati c в своей сборке, но я использую проверки обнуляемости в IntelliJ IDEA (javax.annotation
, а не org.jetbrains.annotations
) с установленной серьезностью предупреждения.