避免检查中间对象的空值

时间:2020-01-29 15:56:46

标签: java

我们都已经看到了这种代码

if (myObject!= null 
  && myObject.mySubObject() != null
  && myObject.mySubObject().getSpecificValue() != null
  && !myObject.mySubObject().getSpecificValue().isEmpty()
) {
     ......
}

我该如何写出简洁的方式?

2 个答案:

答案 0 :(得分:6)

您可以使用Optional进行链接:

Optional.ofNullable(myObject)
  .map(o -> o.mySubObject())
  .map(so -> so.getSpecificValue())
  .map(sv -> sv.isEmpty())
  .orElse(false)

或者方法引用更短(相同):

Optional.ofNullable(myObject)
  .map(Foo::mySubObject)
  .map(Bar::getSpecificValue)
  .map(Baz::isEmpty)
  .orElse(false)

其中FooBarBaz是相应类的名称。

答案 1 :(得分:1)

如果您正在使用其他人的代码,那么您实际上就无法处理null。另一方面,如果对代码库有控制权,则绝不返回null对象,并在整个应用程序中制定规则。

乍一看听起来很糟糕,但是我已经开发了一些企业级应用程序,这是使代码一致且可读性更高的非常有效方式。

现在,这个

if (myString != null && !myString.isEmpty()) {

变得简单

if (!myString.isEmpty()) {

为此,请使用J8中的新Optional功能,以达到此目的。

相关问题