首页 > 解决方案 > Java lambda 参数:如何防止使用外部范围的参数?

问题描述

我确实知道 lambda 和参数在 Java 中是如何工作的。问题是在 lambda 的主体中,我希望强制只使用 lambda 参数,并且(如果可能)让编译器在使用外部范围变量时抛出错误。

例子:

坏的:

    int outerInt = 3;
    Predicate<String> lamb = s -> { 
        return outerInt==0 && s.equals("x"); //using outerInt -> bad!
    };

    bool res = lamb.test("?");

好的:

    int outerInt = 3;
    BiPredicate<String, Integer> lamb = (s, i) -> { 
        return i==0 && s.equals("x"); //using lambda parameter 'i' instead of outerInt-> good!
    };

    bool res = lamb.test("?", outerInt);

您将如何设计您的代码,或者我们能否以某种方式设置 java 编译器来强制执行这种方法?

标签: javalambdaclosures

解决方案


你想要的东西实际上违背了 lambdas 的本质:

lambda 表达式的主体与嵌套块具有相同的范围。

资源。

如果要分离范围,请将功能放入单独的方法中。


推荐阅读