来自 lambda 的非本地 return?

Nonlocal return from lambda?

我是编程新手,所以请温柔点! :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("...");
}

这里有一段代码。如果存在可选项,我会做一些事情并想通过调用 return 来退出该方法。我现在想知道为什么我的记录器记录了一些东西,尽管存在 testString。有人可以指出我缺少的东西吗?谢谢!

问题是当你这样做时:

 testString.ifPresent(s -> {
        //do stuff...
        System.out.println("Exit method");
        return;
    });

您 return 来自 lambda 函数,而不是您期望的来自 test()。

尝试使用 isPresent:

    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)

它也处理其他部分。现在你应该坚持已经接受的答案。