我需要报告的特定数据,然后从父对象获取所有信息Object1
它具有很多属性,对象属性Object11, Object12, Object13, attr1, attr2...
属性也有很多属性Object111, Object131, Object132,..
到目前为止,我已经获得了5级数据属性。
当我向报告发送信息时,它说:错误:cause:nullobject1.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("")