因此在类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不同。
答案 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更多的属性。这就是不匹配的原因。