Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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
Java 为什么允许向上转换数组,而不允许使用泛型?_Java_Arrays_Generics - Fatal编程技术网

Java 为什么允许向上转换数组,而不允许使用泛型?

Java 为什么允许向上转换数组,而不允许使用泛型?,java,arrays,generics,Java,Arrays,Generics,以下泛型代码无法编译,我可以理解原因:这是为了停止向集合中添加可能不兼容的类型: List<Object> objectList = new ArrayList<Object>(); List<String> stringList = new ArrayList<String>(); objectList = stringList; // 'Incompatible types' compiler error //

以下泛型代码无法编译,我可以理解原因:这是为了停止向集合中添加可能不兼容的类型:

    List<Object> objectList = new ArrayList<Object>();
    List<String> stringList = new ArrayList<String>();
    objectList = stringList; // 'Incompatible types' compiler error
    // I understand the compilation error above
    // is to stop you adding incompatible types
    objectList.add(Integer.valueOf(1024));

为什么编译器不阻止我进行数组的上传,因为阻止我进行泛型的上传会遇到麻烦?

正如您在尝试将不正确的类型放入数组时所注意到的那样,JVM可以通过抛出
ArrayStoreException
在运行时停止

但在泛型的情况下,这种机制是不可能的(至少在您不使用的情况下是不可能的),因为JVM不能在运行时阻止您,它会在编译时更早地阻止您

    Object[] objectArray = new Object[10];
    String[] stringArray = new String[10];
    objectArray = stringArray; // No compiler error on this line
    objectArray[0] = Integer.valueOf(1024); // 'java.lang.ArrayStoreException: java.lang.Integer' runtime error