Java 子类参数化问题

Java 子类参数化问题,java,javafx,subclass,Java,Javafx,Subclass,所以在类测试中,我创建了类型A的ObservableList,其中A有子类B和C。每个子类的对象都有一个列表。但是,我收到以下错误: The method foo(ObservableList<A>) in the type is not applicable for the arguments (ObservableList<B>). 类型中的方法foo(ObservableList)不适用于参数(ObservableList)。 为什么会这样?既然B是a的一个子

所以在类测试中,我创建了类型A的ObservableList,其中A有子类B和C。每个子类的对象都有一个列表。但是,我收到以下错误:

The method foo(ObservableList<A>) in the type is not applicable for the arguments (ObservableList<B>). 
类型中的方法foo(ObservableList)不适用于参数(ObservableList)。
为什么会这样?既然B是a的一个子类,这不应该工作吗

其他说明:


A、 B和C与测试在不同的包中

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

foo(List)
不接受
List
。如果您希望有一个
列表
,那么您希望能够将
编号
添加到列表中。您不能在
列表中添加任何
编号
,现在可以吗

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

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!!
void foo(列表){
///所有列表都必须有一个42
添加(新整数(“42”);
}
//后来
列表=新的ArrayList();
//哦,老兄,我们得把这张单子翻出来!
foo(列表);//卡布姆!当我们将整数添加到双精度列表中时!!

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

foo(List)
不接受
List
。如果您希望有一个
列表
,那么您希望能够将
编号
添加到列表中。您不能在
列表中添加任何
编号
,现在可以吗

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

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!!
void foo(列表){
///所有列表都必须有一个42
添加(新整数(“42”);
}
//后来
列表=新的ArrayList();
//哦,老兄,我们得把这张单子翻出来!
foo(列表);//卡布姆!当我们将整数添加到双精度列表中时!!

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

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

这个答案没有意义-如果你期望A,得到了B,你可以对B做所有你能对A做的事情。问题是因为它是一个B的容器,你不能向它添加一个C,如果它是一个A的集合,你可以。我想我没有很好地表达它。但是我们在同一页上。这个答案没有意义-如果你期望A,得到B,你就可以对B做所有你可以对A做的事情。问题是因为它是B的容器,你不能向它添加C,如果它是A的集合,你可以。我想我没有很好地表达它。但是我们在同一页上。
observateList。
observateList。