从内部lambda表达式退出方法

时间:2017-10-06 19:01:08

标签: java java-8

我有方法包含lambda表达式我希望通过在lambda体中调用return从方法返回但它不起作用。 lambda体中的返回不影响外部方法

void X(){
    lmbda -> {
        if (i > j) return;
    }
    some code ....
}

1 个答案:

答案 0 :(得分:2)

lambda 表达式是调用它的代码的独立。这也是为什么它所使用的一切必须最终(或者至少是有效的最终)。

您可以使用lambda设置字段来实现此类功能,例如嵌入在外部方法中已知的最终容器类中的boolean。然后,外部方法可以检测到boolean 更改return。但 lambda 本身不能强迫方法return

然而,您可能需要重新考虑您的设计,您可能不需要那里的lambda。

我谈到的例子:

public class Flag {
    public boolean flag = false;
}

public class YourClass() {
    private final static Flag FLAG = new Flag();

    void X() {
        FLAG.flag = false;

        lmbda -> {
            if (i > j) {
                FLAG.flag = true;
            }
        }

        if (FLAG.flag) {
            FLAG.flag = false;
            return;
        }

        some code ...
    }
}

可能,但绝对不是你所谓的漂亮的设计