为什么对Vector、ArrayList和整个Java集合框架使用弱类型数组
我想知道为什么Vector api(以及其他api)没有像下面的代码那样选择对其底层数组使用强类型?为什么要使用星期键入对象?强类型不是更好吗?因为类型安全性是在编译时解决的为什么对Vector、ArrayList和整个Java集合框架使用弱类型数组,java,generics,strong-typing,Java,Generics,Strong Typing,我想知道为什么Vector api(以及其他api)没有像下面的代码那样选择对其底层数组使用强类型?为什么要使用星期键入对象?强类型不是更好吗?因为类型安全性是在编译时解决的 public class Vector<E> { private static final initialCapacity = 2; protected E[] elementData; private Vector(Class<E> c) { @Suppr
public class Vector<E> {
private static final initialCapacity = 2;
protected E[] elementData;
private Vector(Class<E> c) {
@SuppressWarnings("unchecked")
final E[] elementData = (E[]) Array.newInstance(c, initialCapacity);
}
}
公共类向量{
专用静态初始容量=2;
受保护的E[]元素数据;
专用向量机(c类){
@抑制警告(“未选中”)
最终的E[]元素数据=(E[])数组。newInstance(c,initialCapacity);
}
}
Vector
,ArrayList
,整个集合框架是在泛型出现之前编写的。他们当时并没有真正的替代方案,为了向后兼容,必须保留这种方式。我的意思不是特别针对Vector,但一般来说,无论采用哪种方式,都需要在某个地方进行未经检查的强制转换……您认为哪种方式更“类型安全”呢?@OliCharlesworth同意,但有一种是经过检查的,一个是未检查的,对吗?我真正的问题是,为什么要不检查?听起来强类型更好,对吗?在Java中,很多东西可能更好,但从合同上讲,您会破坏API的原则,即不删除,而是替换或改进。Java就是这样做的,它不会破坏自己的API(通常)。它还需要一个显式的类
对象,这意味着您实际上无法使它与嵌套泛型一起工作:您无法强制执行列表
的类型检查。