Mat*_*zak 5 java if-statement optional java-8
我有Optional的问题,我不知道如何处理它.
public void check(String name) {
if (name != null)
doSomething(name);
else
doMore();
}
Run Code Online (Sandbox Code Playgroud)
如果进入Optional,如何更改?
Eug*_*ene 13
有一个非常巧妙的方法,但在jdk-9 ...
public void check(String name){
Optional.ofNullable(name)
.ifPresentOrElse(YourClass::doSomething, YourClass::doMore);
}
Run Code Online (Sandbox Code Playgroud)
假设doSomething并且doMore是静态方法...如果不是应该使用实例,例如this::doSomething或this::doMore
虽然有一种方法可以使用Optionals 创建相同的代码(例如,请参阅Eugene的答案),但您不应该Optional在这里使用s(imho).
要么你将Optional传递给你的方法,这会给调用者带来开销,并且没有真正理解为什么/为什么用例Optional被引入.
或者你会Optional在方法中创建自己.这更"好"但非常麻烦,模糊了实际发生的事情,如果我在代码审查期间遇到它,我会要求更改它.只需使用a Optional和您当前的代码比较代码段- 您的代码可能在字符方面更短,很明显发生了什么.在这里使用Optionals的唯一好处是,它似乎变成了一个单行,首先没有什么比可读性更重要,而且如果你想添加一些大括号,它是你无论如何都可以实现的.
底线:您的代码完全没问题.
没有理由改变你的实现。在java 8中,没有办法在没有if的情况下使用Optional做你想做的事,同时尊重不使用“map”产生副作用的想法。
我的意思是,你可以有
public void check(String name) {
Optional<String> nameOpt = Optional.ofNullable(name);
nameOpt.ifPresent(n -> doSomething(n));
if (!nameOpt.isPresent()) {
doMore();
}
}
Run Code Online (Sandbox Code Playgroud)
但这没有意义。这里有一篇很好的文章,Optional 试图解决什么问题(以及它的用途):主要针对返回类型。其他东西只是过度使用它。
| 归档时间: |
|
| 查看次数: |
5503 次 |
| 最近记录: |