3 回答
TA贡献1869条经验 获得超4个赞
您可以通过 链接所有这些调用Optional::map。我觉得这比 更容易阅读if/else,但它可能只是我
Optional.ofNullable(person.getClothes())
.map(Clothes::getCountry)
.map(Country::getCapital)
.ifPresent(...)
TA贡献2080条经验 获得超4个赞
这些“级联”空检查确实是偏执和防御性编程。我从一个问题开始,在将输入存储到这样的数据结构之前,让它快速失败或验证输入不是更好吗?
现在来回答这个问题。由于您使用了嵌套空检查,因此您可以使用类似Optional<T>的方法Optional::map来获得更好的控制:
Optional.ofNullable(person.getClothes())
.map(clothes -> clothes.getCountry())
.map(country -> country.getCapital())
.orElse(..) // or throw an exception.. or use ifPresent(...)
TA贡献1863条经验 获得超2个赞
您可以使用单行代码实现
if (person != null && person.getClothes != null && person.getClothes.getCountry != null) { }
如您所知,=
和之间存在重大差异==
。
运算符 && 和 || 是短路的,这意味着如果左侧表达式的值足以确定结果,它们将不会评估其右侧表达式
如果您的第一个表达式为真,那么它只会检查下一个表达式。
如果第一个表达式为假,则不会检查下一个表达式。
因此,根据您的要求,如果 person 不为空,则仅检查person.getClothes != null
等等。
添加回答
举报