Domanda

Sono un programmatore C ++, e stavo leggendo questo sito quando mi sono imbattuto l'esempio di seguito. Che cosa è questa tecnica chiamata in Java? Come è utile?

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);
    }
  }
}
È stato utile?

Soluzione

Il concetto generale utilizzato c'è classi anonime

Quello che hai effettivamente fatto è quello di creare una nuova sotto-classe di applicazioni, ignorando (o di esecuzione) un metodo in sottoclasse. Dal momento che la sottoclasse è senza nome (anonimo) non è possibile creare ulteriori istanze di quella classe.

È possibile utilizzare questa stessa tecnica per implementare un'interfaccia, o di creare un'istanza di una classe astratta, a patto che si sceglie di implementare tutti i metodi necessari nella definizione.

Altri suggerimenti

Come altri hanno sottolineato il codice crea oggetti fittizi per le esigenze di prova. Ma è anche facendo qualcosa chiamato "Anonymous classe interna".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top