如何解决在嵌套类上调用 getter 方法时如何避免 NullPointerException 情况描述问题
希望你能帮助我解决我的问题。其实我知道有解决方案(例如空检查),但我正在寻找一个超级优雅的解决方案!在最好的情况下,oneliner。希望你能帮助我。
我现在用简单的例子来描述这个问题。
情况描述
我有一个 Java 对象,它包含其他简单成员变量旁边的其他 Java 对象(嵌套 Java 对象)。
类存储:
- 字符串名称
- 字符串城市
- 员工员工
班级员工:
- 字符串名称
- 整数年龄
- 银行账户银行账户
...等等。
可以看到 Store 对象 -> 包含:Employee 对象 -> 包含:一个 BankAccount 对象。
问题
要从 Store 对象调用 Employee 的年龄,我会这样做:
Store.getEmployee().getAge();
或者如果我想要银行账户 IBAN,我就必须这样做
Store.getEmployee().getBankAccount().getIban();
但是,如果商店没有 Employee,则.getEmployee()
将导致NullPointerException
。
银行账户也同样如此。
当然可以
if(Store.getEmployee() != null) {
if(Store.getEmployee().getBankAccount() != null) {
System.out.println(Store.getEmployee().getBankAccount().getIban();
}
}
但这就像超级烦人。
有没有更简单的解决方案?
注意:Optionals 也不起作用,因为
Optional.ofNullable(Store.getEmployee().getBankAccount().getIban().orElse("");
不起作用,当 Store.getEmployee() 已经导致异常时。
编辑 请注意,对象本身不应成为解决方案的一部分。当然,您可以修改对象,以便返回一个可选的或自己进行空检查。 这背后的原因是,您只是获取对象并对其进行处理,而不允许对其进行配置。
解决方法
您可以使用以下内容:
Optional.ofNullable(store.getEmployee())
.map(Employee::getBankAccount)
.map(BankAccount::getIban)
.orElse("")
您还应该考虑定义返回类型为 getEmployee
的 Optional<Employee>
方法,在这种情况下,您可以将其更改为:
store.getEmployee()
.map(Employee::getBankAccount)
.map(BankAccount::getIban)
.orElse("")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。