【发布时间】:2014-08-05 14:18:47
【问题描述】:
以下泛型代码无法编译,我可以理解原因:这是为了阻止将可能不兼容的类型添加到集合中:
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));
但是,我可以对数组做同样的事情,并且不会出现编译器错误。当我运行它时,我得到一个ArrayStoreException
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
为什么编译器不会阻止我对数组进行向上转换,因为阻止我进行泛型向上转换会很麻烦?
【问题讨论】: