Вопрос

Я недавно сталкиваюсь с этим кодом ниже при изучении Javafx, я вижу, что Наблюдатель Является ли интерфейс, и нет его реализации, как вы можете использовать его переменную? Очевидно, что я что -то упускаю здесь, может ли кто -нибудь указать мне на правильное направление?

    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! ");
        }
    });
Это было полезно?

Решение

Я думаю этот код:

FXCollections.observableList(list);

означает, что этот метод получает реализацию интерфейса, вы можете загрузить источник, чтобы проверить его.

Другие советы

А FXCollections.observableList() Метод возвращает экземпляр класса, который реализует этот интерфейс. Вы не видите имя этого класса здесь, но вам не нужно видеть его (или действительно, нужно даже знать, что это такое.) В этом вся смысл полиморфизма-объектно-ориентированного программирования: вы , клиент, имеет дело только с интерфейсом; У кого -то другое - создать фактический класс или набор классов, которые реализуют его. Если вы получите это одно очко, то у вас есть ручка к вещам.

Конечно, вы можете использовать переменную с типом интерфейса: вы просто не можете истентный это (нет призвания new ObservableList()), но любой экземпляр класса, который реализует этот интерфейс, действителен для этой переменной.

Поскольку я не могу объяснить это лучше, тогда, посмотрите на это объяснение: Использование интерфейсов в качестве переменных

FXCollections.observableList() Должен вернуть экземпляр конкретного класса, или null.

Если присутствующий код действительно работает, результат не может быть null Поскольку в этом случае observableList.addListener(...) бросил бы NullPointerException.

Из этого следует, что FXCollections.observableList() возвращает неnull ссылка.

Следовательно, предположение, что «нет реализации [ObservableList] 'ошибочно: должна быть реализация ObservableList где-то. Возможно, у вас нет доступа к этому, но это, безусловно, существует.

Если вы можете, посмотрите на исходный код для FXCollections.observableList().

Да, как верхний говорит .... метод fxcollections.observablelist () возвращает экземпляр класса, который реализует интерфейс наблюдений ...... t

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

Это интерфейс, и FXCollections.observableList() возвращает объект, который реализует его вам. В Javadoc вы заметите, что ObservableList расширяется Observable ... что где addListener() происходит от.

Реализация анонимный класс.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top