Question

i BOSSES récemment dans ce code ci-dessous lors de l'exploration JavaFX, je vois que ObservableList est une interface et il n'y a pas la mise en œuvre de celui-ci, comment pouvez-vous utiliser une variable de celui-ci? évident que je me manque quelque chose ici, peut point quelqu'un me direction?

    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! ");
        }
    });
Était-ce utile?

La solution

Je pense que ce code:

FXCollections.observableList(list);

signifie cette méthode obtenir une implémentation de l'interface, vous pouvez télécharger la source pour le vérifier.

Autres conseils

La méthode FXCollections.observableList() renvoie une instance d'une classe qui implémente cette interface. Vous ne voyez pas le nom de cette classe, mais vous n'avez pas besoin de le voir (ou bien, besoin de même savoir ce qu'il est.) Ceci est le point entier de polymorphisme - de la programmation orientée objet: vous , le client, seul face à l'interface; il quelqu'un de travail d'autre pour créer la classe réelle, ou ensemble de classes, qui le mettre en œuvre. Si vous obtenez ce un point, alors vous avez une poignée sur les choses.

Bien sûr, vous pouvez utiliser une variable avec le type d'une interface: vous ne pouvez pas istantiate (pas de new ObservableList() appeler), mais une instance d'une classe qui implémente cette interface est valable pour cette variable.

Puisque je ne peux pas l'expliquer mieux que ici, jetez un oeil sur cette explication: en utilisant des interfaces sous forme de variables

FXCollections.observableList() doit retourner une instance d'une classe de béton ou null.

Si le code actuel fonctionne en fait, le résultat ne peut pas être null puisque, dans ce cas observableList.addListener(...) jetterait un NullPointerException.

Il en résulte que FXCollections.observableList() ne retourne une référence non null.

Par conséquent, l'hypothèse selon laquelle « il n'y a pas de mise en œuvre [ObservableList] » est fallacieux: il doit y avoir une mise en œuvre de quelque part de ObservableList. Vous pourriez ne pas y avoir accès, mais il existe certainement.

Si vous pouvez, jetez un oeil au code source FXCollections.observableList().

oui, comme par exemple supérieure .... la méthode FXCollections.observableList () retourne une instance d'une classe qui implémente l'interface de ObservableList ...... t

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

C'est l'interface et FXCollections.observableList() retourne un objet qui implémente pour vous. Vous remarquerez dans la JavaDoc que ObservableList étend Observable ... qui est là addListener() vient.

La mise en œuvre est une classe anonyme .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top