Che cosa è questa tecnica chiamata in Java?
-
20-09-2019 - |
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);
}
}
}
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".