Niestety, nie koduję Javy od około pięciu lat i absolutnie nie pamiętam, jak i dlaczego działa poniższy kod.Co to jest połączenie konstruktora z następującymi podwójnymi nawiasami klamrowymi?
Natknąłem się na podobny przykład i połamałem go. Nacisk położony jest na część pod komentarzem: Nie otrzymuję notacji konstruktora, a następnie bloku w podwójnych nawiasach. I niestety nie mogę znaleźć niczego w dokumentacji Java lub używając Google (jakie słowo (-y) powinienem (-am) 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;
}
}
Więc oto moje pytania:
- Jak to notacja/składnia nazywa?
- Gdzie mogę przeczytać o tym dokumentację?
Zgaduję/mam nadzieję, że będę w stanie odpowiedzieć na drugie pytanie sam, jeśli ktoś może udzielić mi odpowiedzi na pierwsze pytanie.
Aby było jasne: wiem, że wyjście to John Johnson
;) Ale nie wiem, dlaczego działa.
Kiedy pierwszy raz zobaczyłem go na Usenecie musiałem spojrzeć na nią przez chwilę zanim zorientował, co się dzieje. Kiedy już wiesz, co to jest, jest to oczywiste. –
Widziałem tę schludną sztuczkę jakiś czas temu na SO, ale widziałem też sporo zastrzeżeń, mówiących, że łatwo było z nim zerwać/nie było bardzo niezawodne. Gdybym spróbował go użyć, z pewnością uważałbym, że A) musiałbym wytłumaczyć to każdej osobie, aby zobaczył kod od tego momentu, i B) Że będę musiał przeprowadzić pewne badania zrozumieć wszystkie konsekwencje używania tego wzoru. –
Dziękuję wszystkim za szybkie i pomocne odpowiedzi! – klekker