java - 避免 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 个视图中显示此属性
有更好的方法来做到这一点吗?一个框架或类似的东西来解决这个问题?
解决方案
您可以使用Optional.ofNullable
和map
:
Optional.ofNullable(A.GetB())
.map(B::getC)
.map(C::getD)
.map(D::getPropertyA)
.orElseThrow()
PS1:一些开发人员(和 linter)发现这种方法有一种代码味道,但我认为这种方法更具可读性。
PS2:您可以使用默认值.orElse
而不是.orElseThrow
.
推荐阅读
- java - 添加 jaxb2-basics-annotate 插件会导致不再生成构建器函数
- node-config - 变更日志在哪里?
- algorithm - Scala Array[Int]:最大/最小的 BigO
- android - 在选项卡上保存片段状态
- javascript - JavaScript 将变量数值存储为 cookie 或会话
- ios - AudioUnitRender 错误 -50 带有奇数长度的缓冲区
- angular - Angular - ngFor 变量上的函数
- windows - 如何使用批处理文件在文本文件中查找字符串并替换整行同时保留空白行
- swift - 斯威夫特:我该如何用'替换'?
- nlp - Gensim Word2Vec 的词汇长度错误