有些java方法是null安全的,有些则不是,我怎么知道?

时间:2011-10-17 22:16:57

标签: java

有些java方法是null安全的,但有些则不是。如何区分它们?

4 个答案:

答案 0 :(得分:5)

我认为你的意思是参数?文档应该说明参数是否可以为null,当它们可以为空时,从无效性推断出什么语义。

不幸的是并非所有文档都是这样清楚的 - 同样它也可能没有指定返回值是否为null ...在这种情况下,您可以做的只是实验或尽可能查看源代码:(< / p>

答案 1 :(得分:3)

一般情况下,我建议您假设您不能将null作为参数传递,除非文档明确说明您可以以及相应的行为

采用参数可能为“空安全”的默认假设的一个问题是,即使结果是真的,如果没有文档,相应的行为实际上并不总是很清楚。 “不抛出异常”实际上并不表示会发生什么替代行为/默认参数/假设。

如果你正在设计一个API,那么在哪里是实用的,我建议不要实际上鼓励将null作为参数传递给公开的方法/构造函数,而是使用包含或不包含各种可选参数的单独方法签名。在任何情况下,您可能需要以某种方式记录为弥补缺失参数而采取的实际行为。

答案 2 :(得分:1)

如果幸运的话,参数将被记录或注释,或两者兼而有之。不幸的是,大多数Java API都没有。

某些静态分析工具可以使用注释来检查您是否不恰当地传递空值。例如,FindBugs工具包括对这些注释的支持:

  • @NonNull - 值不能为空
  • @CheckForNull - 该值可能包含null。
  • @Nullable - 值是否可以包含null取决于上下文。

答案 3 :(得分:0)

阅读您要调用的方法的javadoc。如果javadocs没有指定这个,那么单元测试中的试错可能是你最好的选择。