【发布时间】:2014-04-11 04:04:27
【问题描述】:
我在Java Generics 上阅读了这篇文章,其中提到ArrayList 的构造函数看起来有点像这样:
class ArrayList<V> {
private V[] backingArray;
public ArrayList() {
backingArray = (V[]) new Object[DEFAULT_SIZE];
}
}
我无法理解编译器的类型擦除和类型检查是如何发生的,正如那里所解释的那样。我得到的一点是类型参数转换为Object 类型。
我想它是(将所有V 替换为Object),但这绝对是错误的。
class ArrayList<Object> {
private Object[] backingArray;
public ArrayList() {
backingArray = (Object[]) new Object[DEFAULT_SIZE];
}
}
它究竟是如何转换为Object 类型但仍保留V 的类型安全性的?
当我有ArrayList<String> 和ArrayList<Integer> 时,每个都有两个不同的类吗?如果没有,String和Integer的类型信息存放在哪里?
【问题讨论】:
-
顺便说一句,集合类实际上并没有这样做。也许他们在写这篇文章的时候就这样做了,但现在不是了。
标签: java object generics arraylist constructor