【发布时间】:2021-10-09 13:42:00
【问题描述】:
我的汽车模型看起来如何
class Car {
// some fields here
Optional<Engine> engine;
}
我如何通过几个步骤做到这一点:
public Optional<Engine> checkEngine (Optional<Car> car) {
Optional<Engine> engine = car
.flatMap(Car::getEngine)
if (engine.isPresent()) {
return engine;
}
return Optional.of(new Engine("At the moment car don't have the engine"));
}
我想用 1 个可选的表达式来做:
public Optional<Engine> checkEngine (Optional<Car> car) {
return car
.flatMap(Car::getEngine)
.orElse(Optional.of(new Car("At the moment car don't have the engine")));
}
但它不起作用,intelij idea 说requered 类型是Engine,但我返回Engine 的可选类型。但是方法是可选的
【问题讨论】:
-
只需在
orElse之前插入一个map(Optional::of)。它相当笨拙,但在更高版本的 java (cr.openjdk.java.net/~iris/se/16/latestSpec/api/java.base/java/…) 中引入了这方面的 API。 -
@CoronA 它有效。你能把它移到答案吗?谢谢
-
Optional永远不会为空,为什么要返回它?很奇怪,在没有车甚至根本没有车的情况下返回Engine,只是要求接收器读取引擎的字符串以发现没有车。你的第二个 sn-p 更奇怪,因为它试图返回一个new Car(…)预期的引擎。
标签: java java-8 functional-programming optional