Ich bin neu bei Java, also ertragen Sie mit mir, wenn das eine lächerlich einfache Frage ist, aber ich bin neugierig auf diesen Methodenaufruf, bei dem {code} eingefügt wurde - siehe Code unten für ein Beispiel in der Methode addSelectionListener. Was ist der Zweck davon? Ich habe in der Dokumentation nach einer Erklärung gesucht, aber ich kann nicht finden, wie diese Praxis genannt wird, geschweige denn irgendeine nützliche Information.
%Vor%Danke für Hilfe oder Einsichten, die angeboten werden können
Dies ist eine anonyme Klasse oder eine anonyme innere Klasse. Wenn Sie danach googlen, finden Sie einige Tutorials / Beispiele. Sun hat auch einige Dokumente .
Wie die anderen Mitwirkenden bereits sagten: Es ist eine anonyme Klasse
Sie hätten eine neue Klasse namens MyClass in einer neuen Datei namens McClass.java erstellen können, die wie folgt aussieht:
%Vor%Dann hätten Sie die erste Zeile so ändern können:
setStatusLine.addSelectionListener (neu MyClass ());
Siehe? Jetzt haben Sie eine "explizite" Klasse mit nur einer Funktion. Das ist oft zu viel Aufwand und würde Ihr Design überladen.
Hilft das?
Die Methode addSelectionListener empfängt eine SelectionListener-Instanz. Es erhält keinen "Code". Die verwirrende Sache ist die Verwendung des neuen & lt; class / interface name & gt; () {...}. Dieses Konstrukt wird für anonyme innere Klassen verwendet. In der Tat erweitert der obige Code die SelectionAdapter-Klasse, überschreibt ihre widgetSelected-Methode, erstellt eine Instanz der neuen Klasse und übergibt sie an addSelectionListener ().
Die Verwendung von anonymen inneren Klassen ist bei Listenern üblich, wo wir eine neue Klasse erstellen, die an einem bestimmten Ort verwendet werden kann. Daher geben wir ihm keinen Namen, und wir ziehen es vor, ihn direkt in dem Kontext zu implementieren, in dem er verwendet wird.
Ich brauchte einige Zeit, um die anonymen inneren Klassen zu verstehen. Die grundlegenden Dinge zu erinnern sind:
Sie sind genau wie Parameter, außer dass Sie ein primitives oder Object übergeben, das Sie in einer Klasse übergeben, die ein Interface implementiert / eine Klasse erweitert (ja, sie arbeiten auch mit Interfaces), abhängig vom Methodenparameter. Sie sind anonym, also "verschwinden" gleich nachdem die Methode vom Stapel genommen wurde. }); ist ein totes Give-Away für eine anonyme innere Klasse. Sie tauchen häufig Benutzeroberflächen für Listener-Ereignisse auf Sie sparen Unordnung in Ihrem Code, aber machen es auch schwieriger zu lesen.
Zur vollständigen Bestrafung lesen Sie die JLS: Ссылка
Wenn Sie daran interessiert sind, das Wesentliche über solche Dinge zu wissen, ist es gut, das SCJP-Buch zu lesen und die Prüfung zu machen, oder Sie können die JLS studieren. Es wird Sie nicht lernen, wie man programmiert, aber es wird Ihnen helfen, zu verstehen, wie Java und in gewisser Weise viele andere OO-Sprachen funktionieren.
Tags und Links java anonymous-class