我想知道是否有一种方法可以将SuperType数组转换为和数组SubType。就像这样:
SubType[] subArray = (SubType[])someSuperTypeArray;我知道在运行时,这会抛出一个ClassCastException。转换数组的一种方法是将其复制到另一个数组中。在我的例子中,复制它不是一种选择。
我能否欺骗JVM相信强制转换是有效的,并绕过类类型检查?创建对SuperType数组的引用,通过该引用可以将其视为某些SubType数组。(可能面临无法解释的错误的危险)
发布于 2015-07-05 13:22:11
如果您将数组定义为
SuperType[] array = {element1, element2};
SubType[] array2 = (SubType[]) array;它将不起作用,但是您可以这样做:
SuperType[] array = new SubType[]{element1, element2};
SubType[] array2 = (SubType[]) array;您只需确保字段array在转换时始终必须是SubType的数组。
发布于 2015-07-05 13:43:23
someSuperTypeArray只能指向两个可能的数组实例。
SuperType someSuperTypeArray = new SuperType[10];:您可以向这个数组中添加SuperType对象或SubType对象SuperType someSuperTypeArray = new SubType[10];:您只能向这个数组中添加SubType对象。(从技术上讲,您可以在编译时将SuperType对象添加到该数组中,但这将导致在运行时生成ArrayStoreException )让我们假设一下,在第1种情况下,您确实设法使JVM允许将someSuperTypeArray引用转换为SubType[]引用。如果someSuperTypeArray有一个SuperType类型的元素,该怎么办?您不能期望强制转换隐式地丢弃所有SuperType元素。
在第2种情况中,如果您只想将SuperType[]引用转换到SubType[]引用,那么对SubType[]数组实例使用SubType[]引用是否有意义。首先只需使用SubType[]引用即可。
https://stackoverflow.com/questions/31230580
复制相似问题