有没有一种优雅的方法可以使用 Optional 初始化和返回可为空字段的值



我有一段代码返回一个字段的值,但也对其进行了初始化:

public Observable<Integer> asObservable() {
if (subject == null) {
subject = BehaviorSubject.createDefault(0);
}
return subject;
}

我正在尝试使用Optional类来避免if语句:

public Observable<Integer> asObservableWithOptional() {
Optional.ofNullable(subject)
.executeIfAbsent(() -> BehaviorSubject.createDefault(0));
return subject;
}

霍维尔 我仍然对这段代码不满意。有没有办法把这个方法变成一个只有一个陈述?类似于以下内容的操作不起作用,因为在调用工厂方法期间尚未初始化subjectofNullable

return Optional.ofNullable(subject)
.executeIfAbsent(() -> BehaviorSubject.createDefault(0))
.get();

注意:我没有使用原始的Java8 API,而是使用此API的aNNiMON端口 https://github.com/aNNiMON/Lightweight-Stream-API。

怎么样

return subject = Optional.ofNullable(subject).orElseGet(() -> BehaviorSubject.createDefault(0));

当然,您可以使用三元条件运算符,而不是创建Optional只是为了立即丢弃它:

return subject != null ? subject : (subject = BehaviorSubject.createDefault(0));

我会建议这样的东西:

return (subject == null ? (subject = BehaviorSubject.createDefault(0)) : subject);

最新更新