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

そこで使用されている一般的な概念は匿名クラスです

効果的に行ったことは、Applicationの新しいサブクラスを作成し、サブクラスのメソッドをオーバーライド(または実装)することです。サブクラスには名前がない(匿名)ため、そのクラスのインスタンスをこれ以上作成することはできません。

定義に必要なすべてのメソッドを実装している限り、これと同じ手法を使用して、インターフェイスを実装したり、抽象クラスをインスタンス化したりできます。

于 2010-03-16T01:10:53.293 に答える
4

他の人が指摘したように、コードはテストの目的でモックオブジェクトを作成しています。しかし、それは「匿名インナークラス」と呼ばれることも行っています。

于 2010-03-16T01:11:05.760 に答える