使用optional防止traincrasks中的空指针

sczxawaw  于 2021-06-26  发布在  Java
关注(0)|答案(1)|浏览(211)

我只是想知道以下是不是optional的错误用例。可能是的,因为它看起来很恶心。
(这是关于调用返回空值的“遗留”代码。)

private static class Person {
    private Address address;
    private String name;
  }

  private static class Address {
    private Integer housenr;
    private String houseletter;
    private String street;
  }

  assertThat(person.getName() + ": " + Optional.ofNullable(person.getAddress())
      .map(x -> Optional.ofNullable(x.getHousenr()).map(y -> y + " ").orElse("") +
          Optional.ofNullable(x.getHouseletter()).map(y -> y + " ").orElse("") +
          Optional.ofNullable(x.getStreet()).orElse(""))
      .orElse("<unknown>"))
      .isEqualTo("Charles Babbage: 4 l Regentstreet");

我应该把代码放在person类和address类的方法中,这样就不会太麻烦了。

bbuxkriu

bbuxkriu1#

我不认为这是一个错误的用例。诚然,如果不考虑格式和空白,阅读起来就不那么容易了,而是你使用的方式 Optional 我觉得很好。
就Assert而言,拥有(真正难看的)代码是很好的。我不知道您最终打算使用的用例,但是假设您只想生成这些对象的字符串表示,我会将检查相应类中空值的逻辑封装在 toString() 方法或类似方法。
编辑:难看的代码不会使其使用错误。尽管你的同事最终可能会恨你

相关问题