我们可以将包含超类对象的向量转换为包含子类对象的向量吗?

时间:2015-02-03 10:49:07

标签: java vector

我有两个这样的矢量:

Vector<Animal> vAM = new Vector<Animal>();
Vector<Cat> vCat = new Vector<Cat>();

是否可以将vAM向量转换为vCat向量?如果没有,那该怎么办呢?

更新:我提到这个的原因是我的代码中有一个特定的转换,它不会抛出编译时异常,但会引发运行时异常。因此,我想知道是否有其他方法可以做到这一点。

2 个答案:

答案 0 :(得分:2)

您想到的强制转换只是一个编译时工件:您希望编译器将静态类型Vector<Animal>的表达式重新解释为类型Vector<Cat>的表达式。这种重新解释违反了静态类型安全性,这就是导致编译器错误的原因。

如果你确实需要这个,例如由于你使用的第三方API中的一些不匹配,有一种绕过编译器检查的方法,但是你仍然需要{{1} }:

@SuppressWarnings

请注意,通过这样做,您将失去编译器保证vCat = (Vector<Cat>)(Vector)vAM; 实际上只包含猫。

答案 1 :(得分:1)

是的,你可以使用直接演员。但我不建议这样做,因为不是每个animal都可以是cat。这将导致ClassCastExcpetions

我不明白是否需要这样做,所以我认为最好重新考虑你的程序设计。