Java类型转换问题



可能的重复:
如何投射矢量<对象A>到Vector<对象B>在Java中
List&lt;Dog&gt;List&lt;Animal&gt;的一个子类吗?为什么';t Java';s泛型隐含多态性?

我对java类型转换有一个逻辑问题。我有一个类a,它扩展了类B。因此,我可以有这样的语句A a = new B();但是为什么Vector<A> va = new Vector<B>();Vector<A> va = (Vector<A>)new Vector<B>(); 出现编译器错误

java泛型不支持协变,因此Vector<B>不扩展Vector<A>

这样想吧;

如果C也扩展了B,那么您可以将C放入Vector<B>中。

现在,如果您可以将其强制转换为Vector<A>并执行get,那么您将获得C的实例!

这没有多大意义,所以编译器不允许这样做。正如@amit所说,协变就是这个名字。

请参阅此张贴

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

当涉及到泛型类型的多态性时,java不允许您执行以下操作:

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

这是因为在编译时,编译器摆脱了泛型类型(通过一种称为类型擦除的方法),并像在java 5之前的代码中那样。这是令人困惑的,因为它与数组的行为不同。有了阵列,你可以做到:

A[] myArr = new B[10];

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

希望能有所帮助!

相关内容

  • 没有找到相关文章

最新更新