请参阅匿名内部类封闭类'this

the*_*ega 3 java

假设您有以下代码:

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.

还有什么其他可能性?

Mad*_*ist 7

您可以使用该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)