假设您有以下代码:
public abstract class DecisionFunctionJ {
public abstract double evaluate();
public DecisionFunctionJ add(final DecisionFunctionJ another) {
return new DecisionFunctionJ() {
@Override
public double evaluate() {
return this.evaluate() + another.evaluate();
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码并不像预期的那样有效,因为它导致了无限循环/ StackOverflowException.原因很明显:this.evaluate()引用evaluate内部匿名类的evaluate方法而不是外部抽象类的方法.
我该如何执行外部evaluate方法?使用DecisionFunctionJ.this.evaluate()没有帮助,因为这两个类都是类型DecitionFunctionJ.
还有什么其他可能性?
您可以使用该DecisionFunctionJ.this引用来引用封闭类:
public abstract class DecisionFunctionJ {
public abstract double evaluate();
public DecisionFunctionJ add(final DecisionFunctionJ another) {
return new DecisionFunctionJ() {
@Override
public double evaluate() {
return DecisionFunctionJ.this.evaluate() + another.evaluate();
}
};
}
}
Run Code Online (Sandbox Code Playgroud)