【问题标题】:Avoid if for chained objects [duplicate]避免使用链式对象[重复]
【发布时间】:2020-02-26 17:11:18
【问题描述】:

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

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 个视图中显示此属性

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

【问题讨论】:

标签: java spring spring-boot oop if-statement


【解决方案1】:

您可以使用Optional.ofNullablemap

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

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

P.S.2:您可以使用默认值 .orElse 而不是 .orElseThrow

【讨论】:

  • 我认为这实际上是一种效果很好的情况,我只是不喜欢人们传递默认值并在他们已经有局部变量时这样做。并且可以只使用三元表达式
  • 这种方法解决了我所有层次的问题?如果我的 getD 或 getC 中有 null? tks
  • @FabioEbner 正确。如果有帮助,请考虑支持/标记为正确。
  • 只有一个疑问,如果我有这个子对象之一是一个列表?示例列表
  • @FabioEbner 然后呢?
猜你喜欢
  • 2015-07-30
  • 2016-04-17
  • 2015-02-05
  • 2023-03-22
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多