Может ли возвращаемое значение метода обнуляться из логического аргумента метода в JSR-305? - PullRequest
1 голос
/ 28 апреля 2020

Предположим, у меня есть метод для анализа числа, чей контракт обнуляемости возвращаемого значения должен быть выведен из его аргумента:

@...
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) с установленной серьезностью предупреждения.

...