是否可以在Java中实现类似的功能?我的想法是使用匿名类向类添加方法,但这似乎行不通。

public class Abc {
    private ErrorsTable expectedErrorsTable = new ErrorsTable() {
        public ErrorsTable addError(String error) {
            this.add(error); //ErrorsTable is just a disguised ArrayList
            return this;
        }
    };

    ...

    public void someMethod() {
        expectederrorsTable.adError("abc");
    }
}


绝对不能解释为什么这行不通。 expectedErrorsTable的类型为ErrorsTable,因此编译器无法知道实际上存在配备了addError(String)的扩展实现。

可以使用其他简单的方法来达到相同的效果(除了使用扩展了ErrorsTable的新类创建新文件之外)?

最佳答案

将其定义为扩展所需类的内部类,然后对其进行声明。

public class Abc {

    private class ExpectedErrorsTable extends ErrorsTable {
        public ErrorsTable addError(String error) {
            this.add(error);
            return this;
        }
    }

    private ExpectedErrorsTable expectedErrorsTable = new ExpectedErrorsTable();

    public void someMethod() {
        expectedErrorsTable.addError("abc");
    }

}

07-25 21:09