检查null的优雅方法

use*_*741 3 java hibernate

使用hibernate我多次使用这种代码:

int someId = entity.getSomething() == null ? null : entity.getSomething().getId();
Run Code Online (Sandbox Code Playgroud)

尝试应用更长的层次结构时,此代码变得更加混乱:

int someId = entity.getParent() == null ? null : 
entity.getParent().getParent() == null ? null :
entity.getParent().getParent().getSomething() == null ? null :
entity.getParent().getParent().getSomething().getId();
Run Code Online (Sandbox Code Playgroud)

有更优雅的方式吗?

Mic*_*son 6

根据Louis Wasserman的评论,Optional几乎可以用作NullObject a'la flogy的解决方案.

使用Java 8 Optional和lambdas看起来像这样

Integer value = Optional.ofNullable(entity)
                        .map( Entity::getParent )
                        .map( Entity::getParent )
                        .map( Entity::getSomething )
                        .map( Something::getId )
                        .orElse(null);
Run Code Online (Sandbox Code Playgroud)