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

Can we cast a vector containing superclass Objects into a vector containing subclass Objects?

我有两个这样的向量:

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

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

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

是的,您可以使用直接转换。但我不建议这样做,因为并非每个 animal 都可以是 cat。这将导致 ClassCastExcpetions.

我不明白有必要做这个转换,所以我认为最好重新考虑一下你的程序设计。

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

如果您确实需要这样做,例如由于您正在使用的第 3 方 API 中存在一些不匹配,有一种绕过编译器检查的方法,但您仍然需要@SuppressWarnings:

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

请注意,这样做会使编译器失去 vAM 实际上只包含猫的保证。