我想知道是否有一种方法可以将SuperType数组转换为和SubType数组。像这样:

SubType[] subArray = (SubType[])someSuperTypeArray;


我知道在运行时会抛出ClassCastException。转换数组的一种方法是将其复制到另一个数组中。就我而言,不能复制它。

我可以欺骗JVM使其认为类型转换有效,并绕过类类型检查吗?创建对SuperType数组的引用,通过它可以将其视为某些SubType数组。 (可能面临无法解释的错误的危险)

最佳答案

如果您定义数组像

SuperType[] array = {element1, element2};
SubType[] array2 = (SubType[]) array;


它不起作用,但是您可以这样做:

SuperType[] array = new SubType[]{element1, element2};
SubType[] array2 = (SubType[]) array;


您只需要确保在投射时,字段array始终必须是您的SubType的数组。

09-25 22:23