1

假设我有一个解析数字的方法,并且应该从它的参数中推断出它的返回值可空性契约:

@...
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)someVar(不安全:如果不是有效的 int 字符串表示,可能会导致 NPE )。

有没有办法根据传递给方法参数可空性的参数绑定返回值的可空性,或者我应该只创建一个具有明确隔离的装箱和原始默认值的重载(这对于这种情况可能很好,但原始类型不是我想处理的唯一情况)?

如果重要:我在构建中不使用静态分析工具,但我使用 IntelliJ IDEA ( javax.annotation, not org.jetbrains.annotations) 中的可空性检查并设置警告严重性。

4

0 回答 0