我有可选的问题,我不知道如何处理它。
public void check(String name) {
if (name != null)
doSomething(name);
else
doMore();
}
如何将此if更改为可选?
没有理由改变您的实现。在java 8中,如果没有如果,就没有办法用可选选项来做你想做的事情,同时尊重不使用“地图”作为副作用的想法。
我是说,你本来可以
public void check(String name) {
Optional<String> nameOpt = Optional.ofNullable(name);
nameOpt.ifPresent(n -> doSomething(n));
if (!nameOpt.isPresent()) {
doMore();
}
}
但这毫无意义。这里有一篇很好的文章,介绍了Optional试图解决的问题(以及它的用途):主要针对返回类型。其他东西只是过度使用而已。
当然,有一种方法可以使用Optional
s(例如,参见尤金的答案)创建相同的代码,但你不应该在这里使用Optional
s(imho)。
要么将Optional
传递到方法中,这会给调用者带来开销,而且查看引入的用例Optional
的原因/原因并没有真正意义
或者您可以自己在方法中创建可选的
。这更“好”,但非常麻烦,掩盖了实际发生的事情,如果我在代码审查中遇到它,我会要求对其进行更改。只需使用
可选
将代码片段与当前代码进行比较即可——您的代码可能在字符方面较短,这是显而易见的。在这里使用Optionals的唯一好处是,它似乎变成了一行,首先,没有什么比可读性更重要,而且,如果你添加一些大括号,没有它你也可以实现。
一句话:你的代码完全没问题。
有一个非常简洁的方法,但在jdk-9中。。。
public void check(String name){
Optional.ofNullable(name)
.ifPresentOrElse(YourClass::doSomething, YourClass::doMore);
}
假设doSomething
和doMore
是静态方法。。。如果没有,应该使用实例,比如this::doSomething
或this::doMore
我试图导入的应用程序中的gradle版本与JDK11不兼容,而JDK11正是android studio用作其嵌入式JDK的。我的机器上有JDK8。我已经尝试进入项目结构来更改JDK8位置的路径,但是如果我尝试更改它,就会出现错误。它说我必须选择一个有效的JDK11目录。如何让android studio使用JDK 8?错误截图
在Java8中,可以返回而不是。Java8文档说,可选的是“一个容器对象,它可以包含非空值,也可以不包含非空值。如果存在一个值,isPresent()将返回true,而get()将返回该值。” 在实践中,这为什么有用呢?另外,有没有使用作为首选项的情况?那表演呢?
如果我的API提供了一个流,客户端是否有办法修改基础集合? 例如: 客户端是否可以调用并以某种方式修改的内容?
编译错误->[无法推断flatMap(函数>)的类型参数]
我正在解析输入JSON。对于一个字段,有3种可能: 字段不存在; 该值设置为NULL; 该值设置为有效值。 null
我知道Optionals ifPresent()调用的目的是替换空检查。从Oracle文档中提取代码示例,它在简单情况下似乎非常有用。例如: 我只是想了解为什么这被认为比空检查更好。可读性?表演在我看来,这会对项目性能造成影响,因为必须引入一个新的对象才能容纳我们最终希望获得的对象?总之,为什么这是 如果(声卡!=null),则认为比这更好。