3 回答

TA贡献1794条经验 获得超7个赞
如果您使用(或计划使用)Java IDE,如JetBrains IntelliJ IDEA,Eclipse或Netbeans或像findbugs这样的工具,那么您可以使用注释来解决此问题。
基本上,你已经@Nullable
和@NotNull
。
您可以在方法和参数中使用,如下所示:
@NotNull public static String helloWorld() { return "Hello World";}
要么
@Nullable public static String helloWorld() { return "Hello World";}
第二个示例将无法编译(在IntelliJ IDEA中)。
当您helloWorld()
在另一段代码中使用第一个函数时:
public static void main(String[] args){ String result = helloWorld(); if(result != null) { System.out.println(result); }}
现在,IntelliJ IDEA编译器会告诉您检查没用,因为该helloWorld()
函数永远不会返回null
。
使用参数
void someMethod(@NotNull someParameter) { }
如果你写的东西像:
someMethod(null);
这不会编译。
上一个例子使用 @Nullable
@Nullable iWantToDestroyEverything() { return null; }
这样做
iWantToDestroyEverything().something();
你可以肯定这不会发生。:)
这是一种很好的方式让编译器检查比通常更多的东西,并强制你的合同更强。不幸的是,并非所有编译器都支持它。
在IntelliJ IDEA 10.5及更高版本中,他们添加了对任何其他@Nullable
@NotNull
实现的支持。
请参阅博客文章更灵活和可配置的@Nullable / @NotNull注释。

TA贡献1872条经验 获得超3个赞
如果不允许空值
如果您的方法是外部调用的,请从以下内容开始:
public void method(Object object) { if (object == null) { throw new IllegalArgumentException("..."); }
然后,在该方法的其余部分中,您将知道它object
不是null。
如果它是一个内部方法(不是API的一部分),只需记录它不能为空,就是这样。
例:
public String getFirst3Chars(String text) { return text.subString(0, 3);}
但是,如果您的方法只是传递了值,并且下一个方法将其传递给它,则可能会出现问题。在这种情况下,您可能需要检查上面的参数。
如果允许null
这真的取决于。如果发现我经常做这样的事情:
if (object == null) { // something} else { // something else}
所以我分支,做两件完全不同的事情。没有丑陋的代码片段,因为我真的需要根据数据做两件事。例如,我应该处理输入,还是应该计算一个好的默认值?
我真的很少使用这个成语“ if (object != null && ...
”。
如果您显示通常使用成语的示例,则可能更容易为您提供示例。
添加回答
举报