[英]Refer to enclosing class' this from anonymous inner class
假设您有以下代码:
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
/ 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();
}
};
}
}
您可以添加第二个私有方法以避免命名冲突:
public abstract class DecisionFunctionJ {
public abstract double evaluate();
public DecisionFunctionJ add(final DecisionFunctionJ another) {
return new DecisionFunctionJ() {
@Override
public double evaluate() {
return outerEvaluate() + another.evaluate();
}
};
}
private double outerEvaluate(){
return evaluate();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.