的Java可选 - 如果else语句
所以一些阅读后,我已经看到了的Java可选 - 如果else语句
if (optional.isPresent()) {
//do smth
}
是不使用可选(http://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html)的首选方式。但是,如果我有一个if语句是这样的:
if (optional.isPresent()) {
car = getCar(optional.get());
} else {
car = new Car();
car.setName(carName);
}
这是做到这一点的最好办法还是有一个比较推荐的方法是什么?
您可以使用Optional
如下。
Car car = optional.map(id -> getCar(id))
.orElseGet(() -> {
Car c = new Car();
c.setName(carName);
return c;
});
与if-else
陈述文字是势在必行的风格,它需要的变量car
之前if-else
块声明。
在Optional
中使用map
是更实用的风格。这种方法事先不需要变量声明,并且推荐使用Optional
。
这确实似乎工作。但是,我想知道这是否使得代码更具可读性,或者是否有这种写法的优势。 – uraza
这样写就会省略声明'Car car'变量的必要性。 – TheKojuEffect
@uraza使用if-else是势在必行的风格,使用这种方法是功能风格。可读性以这种方式增加。 – TheKojuEffect
如果你可以将名称到Car
构造函数,那么你可以这样写:
car = optional.map(id -> getCar(id))
.orElseGet(() -> new Car(carName));
如果必须是分开的构造函数中调用的二传手,你最终会得到这样的:
car = optional.map(id -> getCar(id))
.orElseGet(() -> {
Car c = new Car();
c.setName(carName);
return c;
});
如果Optional不为空,orElseGet是否真的返回一个Car对象? – uraza
如果'Car'具有参数'carName'的构造函数,'car = optional.orElse(new Car(carName));'可以使用。 – TheKojuEffect
看起来,'Op'使用'getCar'方法来获取'car',而不仅仅是'Optional'。 – TheKojuEffect
我怀疑你甚至需要if语句,它有点违反整个观点。 – Stultuske
@assylias这是如何工作的?可选的返回将是一个id而不是Car对象? – uraza
其实它是包装器介绍给开发者,可以从一些方法返回值的缺席,他应该额外考虑。 – Antoniossss