Java "neues" Schlüsselwort im Parameter

7

Ich habe in letzter Zeit viele OOP Design Patterns durchgesehen und bin auf einige seltsame Dinge gestoßen, die ich noch nie zuvor gesehen habe:

%Vor%

Was macht das konkret (zB was macht das "neue" Schlüsselwort hier?):

%Vor%

Zweite Frage:

%Vor%

Dies ist ein Ausschnitt aus einem Beobachterentwurfsmuster. Nach meinem neuen Verständnis erstellt der Name.propertyChange (...) ein Objekt von PropertyChangeEvent und über die Observer-Musterimplementierung von Java benachrichtigt er die Beobachter automatisch, indem er die Informationen dieses neuen Objekts an die Beobachter sendet (oder etwas, das diesem sehr ähnlich ist). Ist das korrekt?

    
Shaku 01.08.2013, 01:44
quelle

3 Antworten

23

Hier erstellt das Schlüsselwort new eine anonyme Klasse.

Dies ist nützlich, wenn Sie einen Listener zum Ausführen einer Aktion benötigen und Sie möchten, dass Ihr Code gruppiert bleibt und / oder die Klasse "einmalig" ist, was bedeutet, dass sie nirgendwo anders verwendet wird.

>

Hier ist ein Link zum Sun-Tutorial zu anonymen Klassen. Alle normalen Klassenregeln gelten. Sie müssen beim Erstellen einer Schnittstelle abstrakte Methoden oder alle Methoden implementieren.

Scope ist etwas anders, da Sie auf Variablen zugreifen können, die in der Klasse deklariert sind, in der Ihre anonyme Klasse verschachtelt ist. Sie können jedoch nicht auf lokale Variablen aus einer anonymen Klasse zugreifen, es sei denn, diese lokalen Variablen werden als final deklariert. Zum Beispiel:

%Vor%

Wenn someString in einem größeren globalen Umfang deklariert würde, wäre dies nicht der Fall.

Zu Ihrer zweiten Frage:

Ja. Sie haben Recht, das passiert im Snippet. Beachten Sie, dass jedes Mal ein neues PropertyChangeEvent erstellt wird? Das ist so, dass Listener, die früher in der Liste erscheinen, die PropertyChangeEvent für Elemente, die später in der Liste erscheinen, nicht ändern.

    
William Morrison 01.08.2013, 01:46
quelle
4

Zunächst ist dies eine Java-spezifische Syntax: Es gibt keine vergleichbare Syntax in C #, wo Sie entweder eine anonyme Klasse erstellen müssen, die object erweitert, oder eine Instanz einer benannten Klasse erstellen.

In Java können Sie mit dieser Syntax eine anonyme Unterklasse von SelectionAdapter erstellen und dabei alle Methoden überschreiben, die Sie für richtig halten. Dies entspricht dem Erstellen einer benannten Klasse, die SelectionAdapter erweitert, alle Methoden wie in den geschweiften Klammern nach dem SelectionAdapter() -Konstruktoraufruf überschreibt und dann den Namen dieser abgeleiteten Klasse im Aufruf von addSelectionListener verwendet. Der einzige Unterschied besteht darin, dass eine solche abgeleitete Klasse einen Namen hat, während die anonyme Klasse aus Ihrem Beispiel keinen Namen * für Programmierer verfügbar hat.

* Intern anonyme Klassen haben Namen: Sie können sie sehen, wenn Sie sich die Liste der vom Java-Compiler erzeugten Klassendateien ansehen. Dateien mit Dollarzeichen und Zahlen in ihren Namen entsprechen anonymen Klassen.

    
dasblinkenlight 01.08.2013 01:47
quelle
0

Das neue Schlüsselwort erstellt ein anonymes Objekt.

Dies ist nützlich, wenn Sie eine Instanz erstellen möchten, die nur einmal verwendet wird.

    
ThiepLV 01.08.2013 01:58
quelle

Tags und Links