2011-03-13 61 views
0

在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的新类创建新文件外)?

+0

子类化有什么问题?您还可以重新定义'ErrorsTable'以包含'addError'方法。 – 2011-03-13 18:26:21

回答

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

}