java为什么不能从枚举构造函数的lambda访问实例成员?
在下面的代码中,我试图输出一个符号的值,该符号是一个加号常量的操作实例变量
但我无法访问该变量
有什么问题吗
public enum Operation {
PLUS("+", (x, y) -> {
System.out.println(symbol);
return x + y;
}),
MINUS("-", (x, y) -> x - y),
TIMES("*", (x, y) -> x * y),
DIVIDE("/", (x, y) -> x / y);
Operation(String symbol, DoubleBinaryOperator op) {
this.symbol = symbol;
this.op = op;
}
public String getSymbol() {
return symbol;
}
protected final String symbol;
private final DoubleBinaryOperator op;
public double apply(double x, double y) {
return op.applyAsDouble(x, y);
}
}
# 1 楼答案
lambda表达式不是
enum
的成员,因此无法直接从enum
访问成员变量。它也无法访问enum的protected
和private
成员。此外,在lambda被传递给构造函数的地方,enum
的成员变量不在范围内一个可能的解决方案是将
symbol
作为第三个参数传递给lambda表达式,但这意味着您必须使用不同于DoubleBinaryOperator
的函数接口例如: