【发布时间】:2019-11-25 01:07:36
【问题描述】:
我确实知道 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 编译器来强制执行这种方法?
【问题讨论】:
-
您或多或少会问:如何在不实际使用 lambda 的情况下使用 lambda;你需要一些类型的输入。
-
不,您不能在 Java 中选择性地为自己关闭语言功能。这需要在代码审查中强制执行。也许您可以为此编写一个静态分析器并将其挂接到您的构建中。