子类参数化问题

时间:2015-04-08 22:16:03

标签: java javafx subclass

因此在类Test I中创建类型A的observableLists,其中A具有子类B和C.一个列表用于每个子类的对象。但是,我收到以下错误:

The method foo(ObservableList<A>) in the type is not applicable for the arguments (ObservableList<B>). 

为什么会这样?由于B是A的子类,不应该这样做吗?

其他说明:

A,B和C与Test不同。

2 个答案:

答案 0 :(得分:4)

这不应该工作。让我们使用具体的例子。

foo(List<Number>)不接受List<Double>。如果您期望List<Number>,您希望能够为其添加Number。您无法将任何Number添加到List<Double>,现在可以吗?

考虑以下可能的实现 - 假装它允许我们编译它:

void foo(List<Number> list) {
   /// all lists have to have a 42
   list.add(new Integer("42"));
}

// later
List<Double> list = new ArrayList<>();
// oh man, we need to foo this list!
foo(list); // kaboom! when we add the integer to the double list!!

答案 1 :(得分:0)

由于B是A的子类,因此B可能具有比A更多的属性。这就是不匹配的原因。