【发布时间】:2019-09-15 00:04:52
【问题描述】:
比较用于将双精度数添加到双精度数的两种运算符类型:DoubleUnaryOperator 和 UnaryOperator
public void test() {
double doub = 10.0;
// This is OK
DoubleUnaryOperator oo = d -> {
return doub + d;
};
// Compilation error: Local variable doub defined in an enclosing scope must be final or effectively final
UnaryOperator<Double> o = d -> {
return doub + d;
};
doub = oo.applyAsDouble(.3);
doub = o.apply(.3);
}
为什么只有 UnaryOperator
【问题讨论】:
-
无法重现。第一个在所有 Java 版本中都无法编译,因为分配给已经初始化的
doub变量使其不是有效的最终版本。你用的是哪个编译器? -
问题正是编译错误,请注意问题。问题在于 Java 8(在 Java 7 中你没有 UnaryOperator 不要尝试在所有以前的 Java 版本中编译,因为不存在 java.util.function 包)
-
当我说 all Java 版本时,我指的是版本 8、9、10、11、12,即所有版本都支持 lambda,所以我当然 不是 指的是版本,7、6、5,... ---我确实注意到了这个问题,问题说
DoubleUnaryOperatorlambda "is OK",这是 not true,因为它无法编译。更改语句的顺序不会改变这一点。 -
我已经删除了函数式编程标签,因为这个问题与函数式编程无关。将来,请在添加标签之前阅读标签说明。许多人订阅了特定的标签,当他们的队列充满与他们的兴趣无关的问题时,他们并不高兴。
标签: java lambda double unary-operator