你可能认为ArrayList<Object>是 Array<String>的父类,其实不是,所以Collection<Object>也不是 Array<String>的父类。下面代码编译时就报错
- ArrayList<String> list1=new ArrayList<>();
- Arraylist<Object> list2=list1;//代码提示错误
- list2.add(new Object());
-
复制代码 因为泛型是在1.5的时候加入的 ,java变得更严谨,它的原则是编译时期不提示类型转换异常,那么运行时就不出现类型转换异常。因为list1和list2都是指向同一片存储空间,往list2中添加进了Object类型的对象,相当于list1也添加了。所以运行时必然出现转换异常
java的泛型这样定义就避免了这种情况。将这种错误提示在了编译时期。
早期的java没有这么严谨。如下面的代码编译就不报错,但运行的时候会抛出异常。- Integer[] i=new Integer[10];
- Number[] n=i;
- n[1]=6.5;
-
复制代码
|