为了账号安全,请及时绑定邮箱和手机立即绑定

避免!= null语句

避免!= null语句

心有法竹 2019-05-28 17:44:57
避免!= null语句我用object != null了很多东西来避免NullPointerException。有没有一个很好的替代品呢?例如:if (someobject != null) {     someobject.doCalc();}NullPointerException当不知道对象是否存在时,这避免了a null。请注意,接受的答案可能已过期,请参阅https://stackoverflow.com/a/2386013/12943以获取更新的方法。
查看完整描述

3 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

如果您使用(或计划使用)Java IDE,如JetBrains IntelliJ IDEAEclipseNetbeans或像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注释


查看完整回答
反对 回复 2019-05-28
?
守着一只汪

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 && ...”。

如果您显示通常使用成语的示例,则可能更容易为您提供示例。


查看完整回答
反对 回复 2019-05-28
  • 3 回答
  • 0 关注
  • 775 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号