Как эта техника называется в Java? - PullRequest
4 голосов
/ 16 марта 2010

Я программист на 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);
    }
  }
}

Ответы [ 2 ]

19 голосов
/ 16 марта 2010

Общая используемая концепция: Анонимные классы

Что вы фактически сделали, так это создали новый подкласс Application, переопределив (или реализовав) метод в подклассе. Поскольку подкласс является безымянным (анонимным), вы не можете создавать дополнительные экземпляры этого класса.

Вы можете использовать эту же технику для реализации интерфейса или создания экземпляра абстрактного класса, если вы реализуете все необходимые методы в своем определении.

4 голосов
/ 16 марта 2010

Как отмечали другие, код создает фиктивные объекты для целей тестирования. Но он также делает то, что называется «Анонимный внутренний класс».

...