Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么对Vector、ArrayList和整个Java集合框架使用弱类型数组_Java_Generics_Strong Typing - Fatal编程技术网

为什么对Vector、ArrayList和整个Java集合框架使用弱类型数组

为什么对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

我想知道为什么Vector api(以及其他api)没有像下面的代码那样选择对其底层数组使用强类型?为什么要使用星期键入对象?强类型不是更好吗?因为类型安全性是在编译时解决的

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(通常)。它还需要一个显式的
对象,这意味着您实际上无法使它与嵌套泛型一起工作:您无法强制执行
列表
的类型检查。