假设您有以下代码:
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();
}
};
}
}
此代码无法按预期工作,因为它会导致无限循环/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();
}
};
}
}
关于java - 从匿名内部类引用封闭类'this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21558458/