java接口没有实现

时间:2012-01-10 15:23:55

标签: java interface javafx-2

我最近在探索javafx时碰到了下面的代码,我看到 ObservableList 是一个接口,没有实现它,你怎么能使用它的变量?显而易见我在这里遗漏了什么,有人能指出我正确的方向吗?

    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! ");
        }
    });

8 个答案:

答案 0 :(得分:6)

FXCollections.observableList()方法返回实现该接口的类的实例。你没有在这里看到这个类的名称,但你不需要看到它(或者甚至需要知道它是什么。)这是多态的整个过程 - 面向对象编程:你,客户端,只处理接口;创建实现它的实际类或类集是其他人的工作。如果你得到这一点,那么你已经掌握了一些东西。

答案 1 :(得分:0)

当然,您可以使用具有接口类型的变量:您不能 istantiate 它(不调用new ObservableList()),但是实现该类的任何类的实例interface对该变量有效。

答案 2 :(得分:0)

由于我无法在此处更好地解释,请查看此解释:using interfaces as variables

答案 3 :(得分:0)

FXCollections.observableList()必须返回具体类的实例,或null

如果您提供的代码确实有效,则结果不能为null,因为在这种情况下observableList.addListener(...)会抛出NullPointerException

由此可见FXCollections.observableList()确实返回非null引用。

因此,假设“没有[ObservableList]的实现”是错误的:必须在某处实现ObservableList。您可能无法访问它,但它确实存在。

如果可以,请查看FXCollections.observableList()的源代码。

答案 4 :(得分:0)

是的,正如上层所说.... FXCollections.observableList()方法返回一个实现ObservableList接口的类的实例...... t

答案 5 :(得分:0)

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

那是接口,FXCollections.observableList()正在返回一个实现它的对象。您将在JavaDoc中注意ObservableList扩展Observable ... addListener()来自哪里。

答案 6 :(得分:0)

我认为这段代码:

FXCollections.observableList(list);

表示此方法获取接口的实现,您可以下载源来检查它。

答案 7 :(得分:-2)

实施是anonymous class