假设我有一个解析数字的方法,并且应该从它的参数中推断出它的返回值可空性契约:
@...
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
) 中的可空性检查并设置警告严重性。