我们都已经看到了这种代码
if (myObject!= null
&& myObject.mySubObject() != null
&& myObject.mySubObject().getSpecificValue() != null
&& !myObject.mySubObject().getSpecificValue().isEmpty()
) {
......
}
我该如何写出简洁的方式?
答案 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)
其中Foo
,Bar
和Baz
是相应类的名称。
答案 1 :(得分:1)
如果您正在使用其他人的代码,那么您实际上就无法处理null
。另一方面,如果您对代码库有控制权,则绝不返回null
对象,并在整个应用程序中制定规则。>
乍一看听起来很糟糕,但是我已经开发了一些企业级应用程序,这是使代码一致且可读性更高的非常有效方式。
现在,这个
if (myString != null && !myString.isEmpty()) {
变得简单
if (!myString.isEmpty()) {
为此,请使用J8中的新Optional
功能,以达到此目的。