4

我是一名 C++ 程序员,当我看到下面的示例时,我正在阅读这个网站。这种技术在 Java 中叫什么?它有什么用处?

class Application {
...
  public void run() {
    View v = createView();
    v.display();
...
  protected View createView() {
    return new View();
  }
...
}    

class ApplicationTest extends TestCase {

  MockView mockView = new MockView();

  public void testApplication {
    Application a = new Application() {    <---
      protected View createView() {        <---
        return mockView;                   <--- whao, what is this?
      }                                    <---
    };                                     <---
    a.run();
    mockView.validate();
  }

  private class MockView extends View
  {
    boolean isDisplayed = false;

    public void display() {
      isDisplayed = true;
    }

    public void validate() {
      assertTrue(isDisplayed);
    }
  }
}
4

2 回答 2

19

那里使用的一般概念是匿名类

您有效地做的是创建一个新的应用程序子类,覆盖(或实现)子类中的一个方法。由于子类未命名(匿名),因此您无法创建该类的任何其他实例。

只要在定义中实现所有必要的方法,就可以使用相同的技术来实现接口或实例化抽象类。

于 2010-03-16T01:10:53.293 回答
4

正如其他人指出的那样,代码正在创建模拟对象以进行测试。但它也在做一些叫做“匿名内部类”的事情。

于 2010-03-16T01:11:05.760 回答