当有后置条件,方法的返回值不能为null时,怎么办?
我可以
assert returnValue != null : "Not acceptable null value";
但断言可以被关闭!
那么可以这样做吗
if(returnValue==null)
{
throw new NullPointerException("return value is null at method AAA");
}
?
或者对于这种情况使用用户定义的异常(如 NullReturnValueException )是否更好?
我建议你永远不要扔NullPointerException
靠你自己。
正如 Thorbjørn Ravn Andersen 在下面的评论中所说,不这样做的主要原因是你不想将“真正的、糟糕的 NPE”与故意抛出的 NPE 混合在一起。
因此,在您确信能够识别“有效”NPE 之前,我建议您使用IllegalArgumentException
当您想告诉您的 API 用户时null
不是有效的参数值。应该记录您的方法在传递非法空参数时的行为。
另一个(更现代的恕我直言)选项是使用@NotNull
参数附近的注释。
这是关于使用@NotNull注释的文章 http://robaustin.wikidot.com/annotations-and-notnull.
正如我之前提到的,在某些情况下,抛出 NPE 不会让您或您的队友感到困惑:NPE 原因应该清晰且可识别。
例如,如果您使用一些带有前提条件模块的库,例如Guava
,然后我发现使用checkNotNull()
-like 方法是处理非法传递空值的更好方法。
checkNotNull(arg, msg)
抛出 NPE,但从堆栈跟踪中可以很清楚地看出,它是由Preconditions.checkNotNull()
因此,这不是一个未知的错误,而是预期的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)