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