我无法理解“对象数组”和“相同对象的数组列表”类型的区别。例如,我有界面X:
public interface X {
public void implemntX();
}
实施X的类XYZ:
public class XYZ implements X{
@Override
public void implemntX() {
// TODO Auto-generated method stub
}
}
以下代码完美无缺:
X arraryOfX[] = new XYZ[10];
if(arraryOfX instanceof XYZ[]){
System.out.println("arraryOfX is instanceOF XYZ[]");
}else{
System.out.println("arraryOfX is NOT instanceOF XYZ[]");
}
Output: arraryOfX is instanceOF XYZ[]
但是下面的代码行给出了编译时错误:
ArrayList<X> arrayListOFX = new ArrayList<XYZ>();
ERROR: Type mismatch: cannot convert from ArrayList<XYZ> to ArrayList<X>
据我所知,ArrayList内部使用数组,那么为什么Type不匹配错误正在冒泡?
答案 0 :(得分:0)
XYZ列表不是X的列表,即使XYZ继承或实现X.Java Generics也不允许这样做。 更明确一点,用真实物体(猫和动物)改变XYZ和X,就像在so link中所说的那样
答案 1 :(得分:0)
假设您class ABC implements X
可以向List<X>
添加ABC实例,但是您可以将其添加到ArrayList<XYZ>
。
仅仅因为ArrayList由数组支持,不要混淆2。