Purtroppo non ho codificato Java per circa cinque anni e non riesco assolutamente a ricordare come o perché il codice seguente funzioni.Cos'è questa chiamata al costruttore con le seguenti doppie parentesi?
Mi sono imbattuto in un esempio simile e l'ho interrotto. L'enfasi è nella parte sotto il commento: non ottengo la notazione del costruttore seguita dal blocco tra parentesi quadre. E sfortunatamente non riesco a trovare nulla nella documentazione Java o usando Google (quale parola devo usare su google?).
package syntaxtest;
public class Main {
public static void main(String[] args) {
// What kind of notation is this?
MyTest tester = new MyTest() {{
setName("John Johnson");
}};
System.out.println(tester.getName());
}
}
class MyTest {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Così qui sono le mie domande:
- Come è questa notazione/sintassi chiamato?
- Dove posso leggere qualche documentazione a riguardo?
Immagino/spero di poter rispondere alla seconda domanda da solo se qualcuno mi può fornire la risposta alla prima domanda.
Per chiarire: so che l'output è John Johnson
;) Ma non so perché funzioni.
Quando ho visto la prima volta su Usenet ho dovuto guardare per un po 'prima di capire cosa stava succedendo. Una volta che sai cos'è, è ovvio. –
Ho visto questo semplice trucco qualche tempo fa su SO, ma ho visto anche alcuni disclaimer che dicevano che era facile rompere cose con esso/non era molto affidabile. Se avessi intenzione di provare ad usarlo, sarei sicuro di considerare che A) Dovrei spiegarlo ad ogni persona per vedere il codice da quel momento in poi, e B) Che dovrei fare qualche ricerca per capire tutte le implicazioni dell'uso di questo modello. –
Grazie a tutti per le risposte rapide e utili! – klekker