“对象数组”和“相同对象的数组列表”类型的区别?

时间:2014-05-01 15:30:56

标签: java arrays arraylist casting type-conversion

我无法理解“对象数组”和“相同对象的数组列表”类型的区别。例如,我有界面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不匹配错误正在冒泡?

2 个答案:

答案 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。