微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在嵌套类上调用 getter 方法时如何避免 NullPointerException 情况描述问题

如何解决在嵌套类上调用 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("")

您还应该考虑定义返回类型为 getEmployeeOptional<Employee> 方法,在这种情况下,您可以将其更改为:

store.getEmployee()
        .map(Employee::getBankAccount)
        .map(BankAccount::getIban)
        .orElse("")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。