Java 8 从lambda非本地返回?
我对编程非常陌生,所以请温柔一点!:DJava 8 从lambda非本地返回?,java-8,optional,Java 8,Optional,我对编程非常陌生,所以请温柔一点!:D public void test(Optional<String> testString){ testString.ifPresent(s -> { //do stuff... System.out.println("Exit method"); return; }); //Log if it was not present Logger.log("...")
public void test(Optional<String> testString){
testString.ifPresent(s -> {
//do stuff...
System.out.println("Exit method");
return;
});
//Log if it was not present
Logger.log("...");
}
公共无效测试(可选测试字符串){
testString.ifPresent(s->{
//做些事情。。。
System.out.println(“退出方法”);
返回;
});
//如果不存在,则记录日志
Logger.log(“…”);
}
这里有一个代码片段。如果存在可选项,我将执行一些操作,并希望通过调用return退出该方法。现在我想知道为什么我的记录器记录了一些东西,尽管testString存在。有人能指出我遗漏了什么吗?谢谢大家! 问题是,当您这样做时:
testString.ifPresent(s -> {
//do stuff...
System.out.println("Exit method");
return;
});
您可以从lambda函数返回,而不是像预期的那样从test()返回
尝试使用iPresent:
if (testString.isPresent()) {
System.out.println("Exit method");
return;
}
//Log if it was not present
System.out.println("Not present");
对于Java9,可选的将具有该方法
void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction)
void ifPresentOrElse(我明白了,谢谢你指出。有没有办法从lambda中结束测试方法?我知道的唯一办法是抛出某种RuntimeException。不太好。好吧,我会接受你的建议。非常感谢!)您可以使用completablefuture
等待lambdas中的计算,包括异步计算。这是一个很好的主意,我认为您应该将其作为一个替代方案发布。