我需要报告的特定数据,然后从父对象获取所有信息

Object1

它具有很多属性,对象属性

Object11, Object12, Object13, attr1, attr2...

属性也有很多属性

Object111, Object131, Object132,..

到目前为止,我已经获得了5级数据属性。

当我向报告发送信息时,它说:错误:cause:null

object1.getIdObject11().getIdObject111().getDescription;

因为Object111为空,所以引发错误

我尝试使用

object1.getIdObject11().getIdObject111().getDescription==null?'':object1.getIdObject11().getIdObject111().getDescription;

但它仅验证描述是否为空,并引发相同的错误
然后我尝试验证对象

if(object1.getIdObject11().getIdObject111() == null) {
    var = object1.getIdObject11().getIdObject111().getDescription;
} else {
    var = "";
}


但是当Object11为null时,它将引发相同的错误。

我认为对每个属性执行此操作不是一个好方法(必须获得30个属性)

if(object1.getIdObject11()!=null) {
    if(object1.getIdObject11().getIdObject111()!=null) {
        if(object1.getIdObject11().getIdObject111().getIdObject1111()!=null) {
             //...
         }
    }
}


我想验证是否存在一个空对象,如果没有,则设置''(空白),而没有那么大的代码(因为获取的参数设置在报表中,并与字母混合)。

reportline1 = "Area: "+object1.getIdObject11().getIdObject111().getName;

最佳答案

您将代码中断Demeter's law。这就是为什么最好重构设计本身。
解决方法是,可以使用Optional

   var = Optional.ofNullable(object1)
    .map(o -> o.getIdObject11())
    .map(o -> o.getIdObject111())
    .map(o -> o.getDescription())
    .orElse("")

09-11 13:59