在下面的代码中,我试图从 PLUS 常量输出作为 Operation 实例变量的符号的值。
但我无法访问该变量。
有什么问题?
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);
}
}
Run Code Online (Sandbox Code Playgroud)
lambda 表达式不是 的成员enum,因此它不能enum直接从 访问成员变量。它还具有无访问protected和private枚举的成员。此外,在将 lambda 传递给构造函数时, 的成员变量enum不在范围内。
一个可能的解决方案是将symbol第三个参数作为第三个参数传递给 lambda 表达式,但这意味着您必须使用与DoubleBinaryOperator.
例如:
interface CalculationOperation {
double calculate(double x, double y, String symbol);
}
public enum Operation {
PLUS("+", (x, y, symbol) -> {
System.out.println(symbol);
return x + y;
}),
MINUS("-", (x, y, symbol) -> x - y),
TIMES("*", (x, y, symbol) -> x * y),
DIVIDE("/", (x, y, symbol) -> x / y);
Operation(String symbol, CalculationOperation op) {
this.symbol = symbol;
this.op = op;
}
public String getSymbol() {
return symbol;
}
protected final String symbol;
private final CalculationOperation op;
public double apply(double x, double y) {
return op.calculate(x, y, symbol);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45 次 |
| 最近记录: |