Frage

Ich bin kürzlich in diesen Code unten, wenn ich Javafx erkundet habe. Ich sehe das Beobachtungsliste Ist eine Schnittstelle und es gibt keine Implementierung. Wie können Sie eine Variable davon verwenden? Offensichtlich fehlt mir hier etwas, kann mich jemand in die richtige Richtung verweisen?

    List list = new ArrayList();

    ObservableList observableList = FXCollections.observableList(list);
    observableList.addListener(new ListChangeListener() {
        @Override
        public void onChanged(ListChangeListener.Change change) {
            System.out.println("Detected a change! ");
        }
    });
War es hilfreich?

Lösung

Ich denke dieser Code:

FXCollections.observableList(list);

bedeutet, dass diese Methode eine Implementierung der Schnittstelle erhält. Sie können die Quelle herunterladen, um sie zu überprüfen.

Andere Tipps

Das FXCollections.observableList() Die Methode gibt eine Instanz einer Klasse zurück, die diese Schnittstelle implementiert. Sie sehen den Namen dieser Klasse hier nicht, aber Sie müssen ihn nicht sehen (oder müssen tatsächlich einmal wissen, was es ist.) Dies ist der gesamte Punkt des Polymorphismus-der objektorientierten Programmierung: Sie , der Client, nur mit der Schnittstelle zu tun; Es ist die Aufgabe eines anderen, die tatsächliche Klasse oder eine Reihe von Klassen zu erstellen, die sie implementieren. Wenn Sie diesen einen Punkt erhalten, haben Sie einen Griff für Dinge.

Natürlich können Sie eine Variable mit dem Typ einer Schnittstelle verwenden: Sie können einfach nicht isantiate es (keine Anrufe new ObservableList()), aber jede Instanz einer Klasse, die diese Schnittstelle implementiert, ist für diese Variable gültig.

Da ich es hier nicht besser erklären kann, schauen Sie sich diese Erklärung an: Verwenden von Schnittstellen als Variablen

FXCollections.observableList() muss eine Instanz einer konkreten Klasse zurückgeben oder null.

Wenn der von Ihnen vorgestellte Code tatsächlich funktioniert, kann das Ergebnis nicht sein null da in diesem Fall observableList.addListener(...) würde a werfen NullPointerException.

Daraus folgt das FXCollections.observableList() Gibt ein Nicht-Nichts zurücknull Hinweis.

Folglich die Annahme, dass es keine Umsetzung von [gibt [ObservableList] 'ist trügerisch: Es muss eine Implementierung von geben ObservableList irgendwo. Sie haben vielleicht keinen Zugang dazu, aber es existiert sicherlich.

Wenn Sie können, werfen Sie einen Blick auf den Quellcode für FXCollections.observableList().

Ja, wie das obere sagen .... Die fxcollections.observablelist () Methode gibt eine Instanz einer Klasse zurück, die die Schnittstelle des Beobachtungslisten implementiert ...... T.

http://docs.oracle.com/javafx/2.0/api/javafx/collections/observablelist.html

Das ist die Schnittstelle und FXCollections.observableList() Gibt ein Objekt zurück, das es Ihnen implementiert. Sie werden im Javadoc feststellen, dass ObservableList erweitert Observable ... Welche ist wo addListener() kommt von.

Die Implementierung ist eine Anonyme Klasse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top