加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_开封站长网 (http://www.0378zz.com/)- 科技、AI行业应用、媒体智能、低代码、办公协同!
当前位置: 首页 > 云计算 > 正文

有效处理空值的10个方法,学不会算我输

发布时间:2022-07-18 12:46:46 所属栏目:云计算 来源:互联网
导读:当我们开始使用Java进行编程时,很多人会把null值当做敌人,并且害怕NullPointerExceptions,下面给大家分享10个有效处理空值的技巧。 「技能分享」有效处理空值的10个技巧,学不会算我输 1.不要过于复杂 就其本身而言,处理null可能是一个复杂的问题,因此
  当我们开始使用Java进行编程时,很多人会把null值当做敌人,并且害怕NullPointerExceptions,下面给大家分享10个有效处理空值的技巧。
  「技能分享」有效处理空值的10个技巧,学不会算我输
  1.不要过于复杂
  就其本身而言,处理null可能是一个复杂的问题,因此我们应使其尽可能整洁和明显。我在某些代码库中看到的一种非常糟糕的做法是在简单的空检查就足够了的地方使用Objects方法,Optional类,甚至使用Optional的单独方法。
 
  虽然对象isNull和Objects ,nonNull不是典型的null检查的最佳选择,它们非常适合与流一起使用。与之相比,使用它们进行过滤或匹配的行的读取(可以说)要好得多。实际上,这就是在JDK中引入它们的原因。
 
  myStream.filter(Objects::nonNull)
  myStream.anyMatch(Objects::isNull)
  3.永远不要将Null作为参数
  这是良好编码的最重要原则之一,但是如果您还不了解它,就应该对它进行解释。传递null表示给定参数没有值可能是一个可行的选择。但是它有两个很大的缺点:
 
  您需要阅读该函数的实现,并弄清楚它以及可能受影响的每个函数能否正确处理空值。
  在更改函数的实现时,您必须始终小心,不要丢掉可能为用户处理空值的内容。否则,您必须搜索整个源代码以检查是否在任何地方传递了null。
  通过接受永不传递null的原则,这两个问题将永远消失。那么带有可选参数的函数呢?很简单,只需使用不同的参数集重载函数即可:
 
  void kill() {
      kill(self);
  }
  void kill(Person person) {
      person.setDeathTime(now());
  }
  顺便说一下,由于这两个缺点在单个类的范围内并不明显,因此在处理私有方法时可以放弃该规则。只要确保事物从外面是安全的即可。
 
  4.验证公共API参数
  您和您的团队可能会使用不成功传递null的原理,但是当公开公共API时,您无法控制其用户以及将其传递给函数的内容。因此,请务必检查传递给公共API的参数的正确性。
 
  如果您唯一关心的是参数的无效性,请考虑使用Objects类中的requireNonNull函数:
 
  public Foo(Bar bar, Baz baz) {
      this.bar = Objects.requireNonNull(bar, "bar must not be null");
      this.baz = Objects.requireNonNull(baz, "baz must not be null");
  }
  5. Leverage Optional
  在Java 8之前,通常会在缺少值的情况下将方法返回null。这天生就是容易出错的,因为开发人员必须经常检查文档,或者如果缺少文档,则返回可能的null的基础源代码。
 
 

(编辑:开发网_开封站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读