【发布时间】:2019-07-24 23:58:13
【问题描述】:
我的 java 代码中有一种情况,我必须对字符串参数进行大量空值检查:
someService.someUpdateFunc(Optional.ofNullable(personPhone.getName()).orElse(""),
Optional.ofNullable(personPhone.getNumber()).orElse(""),
Optional.ofNullable(personPhone.getDescription()).orElse("")
);
我知道,Google Guava 有特殊功能,所以可以这样写代码:
someService.someUpdateFunc(nullToEmpty(personPhone.getName()),
nullToEmpty(personPhone.getNumber()),
nullToEmpty(personPhone.getDescription())
);
但我喜欢纯 OOP,所以我尽量减少在我的代码中使用静态方法。在某些库或框架中是否有标准 String 的特殊装饰器/包装器类,可以封装这种行为?比如:
class StrictString {
private final String origin;
public StrictString(String origin) {
this.origin = origin;
}
public String asString() {
return Optional.ofNullable(origin).orElse("");
}
}
非常感谢您的帮助。
【问题讨论】:
-
@TimBiegeleisen 不完全是。这个问题更多的是关于语法。我确切地询问了装饰器/包装器类。
-
@maximusKon 我还想补充一点,在我看来,使用包装类意味着在任何地方都依赖它。就像病毒一样,到处蔓延。我不会走这条路。风险很高
-
@LppEdd 好吧,在这种情况下,标准的 java String 类是同一个病毒。这就是为什么我不想自己编写它,而是在 Apache Commons 或 Google Guava 等框架中找到实现。
-
使用 Optional 的更好替代方法是 Objects.toString。如
Objects.toString(personPhone.getName(), "")。 Optional 不应用作冗长的 if/else。