首页 > 解决方案 > 避免 if 对于链式对象

问题描述

我有一个像这样的复杂对象;

Object A
   Object B
    Object C
      Object D
        property A
        property B

所以如果我需要在我的视图中显示属性 A,我需要

  A.getB().getC().getD().getPropertyA();

但是如果我的用户不发送对象 C 怎么办?

所以我需要为每个对象创建一个 If

if(A.getB() != null){
  if(A.getB().getC() != null){
    if(A.getB().getC().getD() != null){
      //here I can show the propertyA
    }
  } 
}

现在我必须在 3 个视图中显示此属性

有更好的方法来做到这一点吗?一个框架或类似的东西来解决这个问题?

标签: javaspringspring-bootoopif-statement

解决方案


您可以使用Optional.ofNullablemap

Optional.ofNullable(A.GetB())
    .map(B::getC)
    .map(C::getD)
    .map(D::getPropertyA)
    .orElseThrow()

PS1:一些开发人员(和 linter)发现这种方法有一种代码味道,但我认为这种方法更具可读性。

PS2:您可以使用默认值.orElse而不是.orElseThrow.


推荐阅读