Leider habe ich Java seit ungefähr fünf Jahren nicht programmiert und ich kann mich absolut nicht erinnern, wie oder warum der folgende Code funktioniert.Wie lautet dieser Konstruktoraufruf mit folgenden doppelten Klammern?
Ich stolperte über ein ähnliches Beispiel und brach es zu diesem Thema. Der Schwerpunkt liegt auf dem Teil unterhalb des Kommentars: Ich bekomme die Konstruktornotation nicht gefolgt vom Block in doppelten Klammern. Und leider kann ich nichts in der Java-Dokumentation oder mit Google finden (welches Wort sollte ich googlen?).
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;
}
}
hier sind also meine Fragen:
- Wie ist diese Schreibweise/Syntax aufgerufen?
- Wo kann ich eine Dokumentation darüber lesen?
Ich hoffe/hoffe, dass ich die zweite Frage selbst beantworten kann, wenn mir jemand die Antwort auf die erste Frage geben kann.
Um es klar zu machen: Ich weiß, der Ausgang ist John Johnson
;) Aber ich weiß nicht, warum es funktioniert.
Als ich es zuerst auf Usenet sah ich es für eine Weile zu suchen hatte vor der Realisierung, was los war. Sobald Sie wissen, was es ist, ist es offensichtlich. –
Ich sah diesen netten Trick vor einer Weile auf SO, aber ich sah auch einige Disclaimer, die sagten, dass es einfach war, Sachen damit zu brechen/war nicht sehr zuverlässig. Wenn ich versuchen würde, es zu benutzen, würde ich sicher denken, dass A) ich es jeder Person erklären müsste, um den Code von da an zu sehen, und B) dass ich etwas nachforschen müsste verstehe alle Implikationen der Verwendung dieses Musters. –
Vielen Dank für die schnelle und hilfreiche Antworten! – klekker