关于泛型:Java类型转换问题

Java Type Casting Problem

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicates:
How to Cast a Vector to Vector in Java?
Is List<Dog> a subclass of List<Animal>? Why aren't Java's generics implicitly polymorphic?

我对Java类型的铸造有一个逻辑上的问题。我有一个扩展类B的类A,因此我可以有一个如下的语句A a = new B();但是为什么我会得到Vector va = new Vector();Vector va = (Vector)new Vector();的编译器错误


Java泛型不支持协方差,因此EDCOX1 OR 0不扩展EDCOX1 OR 1


像这样想;

如果C也扩展了B那么你可以把C放入Vector中。

现在,如果你能把它投射到一个Vector上,你做了一个get,你就会得到一个C的实例!

这没什么意义,所以编译器不允许这样做。正如@amit所说,共同方差就是这个名字。

查看此日志


变量的类型必须与传递给实际对象类型的类型匹配。

当涉及到泛型类型的多态性时,Java不允许您如下:

1
2
3
class A { }
class B extends A { }
List<A> myList = new ArrayList();

这是因为在编译时,编译器摆脱了泛型类型(通过称为类型擦除的东西),并且在前Java 5代码中使用了它。这让人困惑,因为它与数组的行为不同。使用数组,可以执行以下操作:

1
A[] myArr = new B[10];

但对于仿制药,情况并非如此。同样,当涉及到泛型时,变量的类型必须与传递给实际对象类型的类型匹配。

希望有帮助!