我已将其编码为:
Optional.ofNullable(this.cache.get(id))
.orElseGet(this.referenceService.get(id));
问题是this.referenceService.get
返回一个Optional
。
所以,我收到以下编译消息:
类型为
orElseGet(Supplier<? extends Reference>)
的方法Optional<Reference>
不适用于参数(Optional<Reference>
)
有什么想法吗?
答案 0 :(得分:3)
从Java 9开始,您可以使用Optional.or()
Optional<String> foo = Optional.empty();
Optional<String> bar = Optional.ofNullable("Bar");
System.out.println(foo.or(() -> bar));
答案 1 :(得分:1)
如果您使用的是Java 9,则可以访问Optional.or
,该接受Supplier<Optional<T>>
。
如果没有,则以下模式有效:
Optional.ofNullable(this.cache.get(id))
.orElseGet(() -> this.referenceService.get(id)
.orElseThrow(()-> new RuntimeException("Expected service to return something")));