数组如何在Java中“记住”它们的类型?
请考虑以下代码:
class AA { }
class BB extends AA { }
public class Testing {
public static void main(String[] args) {
BB[] arr = new BB[10];
AA[] arr2 = arr;
BB b = new BB();
AA a = new AA();
arr2[0] = a; // ArrayStoreException at runtime
arr2[1] = b;
List<BB> listBB = new ArrayList<>();
List listAA = listBB;
listAA.add("hello world.txt");
}
}
在上面的例子中,当我尝试时,我得到了.这意味着数组记住它必须接受的类型。但是不记得他们。它只是编译并运行良好。当我检索对象时将抛出。ArrayStoreException
arr2[0] = a
List
ClassCastException
BB
所以问题是:
数组如何记住其类型(我知道它被称为“重新化”)。这究竟是如何发生的?
以及为什么只有数组被赋予这种能力,尽管它在其引擎盖下使用数组,却没有。
ArrayList
为什么在编译时无法检测到,即当我这样做时,它可能会导致编译器错误,而不是在运行时检测到它。
ArrayStoreException
arr2[0] = a
谢谢。