如何在运行中向类添加方法? (不反思)

时间:2011-03-13 18:20:11

标签: java

是否有可能在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的新文件)?

1 个答案:

答案 0 :(得分:1)

将其定义为扩展所需类的内部类,然后相反地声明它。

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");
    }

}