我有两个这样的矢量:
Vector<Animal> vAM = new Vector<Animal>();
Vector<Cat> vCat = new Vector<Cat>();
是否可以将vAM
向量转换为vCat
向量?如果没有,那该怎么办呢?
更新:我提到这个的原因是我的代码中有一个特定的转换,它不会抛出编译时异常,但会引发运行时异常。因此,我想知道是否有其他方法可以做到这一点。
答案 0 :(得分:2)
您想到的强制转换只是一个编译时工件:您希望编译器将静态类型Vector<Animal>
的表达式重新解释为类型Vector<Cat>
的表达式。这种重新解释违反了静态类型安全性,这就是导致编译器错误的原因。
如果你确实需要这个,例如由于你使用的第三方API中的一些不匹配,有一种绕过编译器检查的方法,但是你仍然需要{{1} }:
@SuppressWarnings
请注意,通过这样做,您将失去编译器保证vCat = (Vector<Cat>)(Vector)vAM;
实际上只包含猫。
答案 1 :(得分:1)
是的,你可以使用直接演员。但我不建议这样做,因为不是每个animal
都可以是cat
。这将导致ClassCastExcpetions
。
我不明白是否需要这样做,所以我认为最好重新考虑你的程序设计。