黑马程序员技术交流社区
标题:
泛型的bug么?解释满意会送去申请加分哦!
[打印本页]
作者:
笑脸迷人
时间:
2014-8-30 19:11
标题:
泛型的bug么?解释满意会送去申请加分哦!
本帖最后由 笑脸迷人 于 2014-8-30 19:25 编辑
请看代码:求解释代码中11行的注释,以及19行的异常的发生(貌似11行代码注释给了解释,但11为什么不报错~)
import java.util.ArrayList;
public class GenericDemo {
public static void main(String[] args)
{
ArrayList<Integer> a=new ArrayList<Integer>();
ArrayList a2=a;//使用原始类型ArrayList的引用变量指向这个参数化类型ArrayList<Integer>
a.add(1);
a2.add("abc");//添加String类型
System.out.println(a.get(0));//1
//Integer i=a.get(1);类型转换异常
System.out.println(a.get(1));//abc
/*为什么能打印出来,按理get方法的返回值是泛型类类型Integer,但a.get(1)的实际返回值确是String,为什么不爆类型转换异常*/
System.out.println(a);//[1, abc]
ArrayList<String> v=new ArrayList<String>();
ArrayList v2=v;//使用原始类型ArrayList的引用变量指向这个参数化类型ArrayList<Integer>
v2.add(1);
v.add("abc");//添加String类型
System.out.println(v.get(0));//报java.lang.ClassCastException错误
System.out.println(v.get(1));
System.out.println(v);
}
}
复制代码
这个问题其实在我的另外的一个帖子里提到;只是很多人看到前面的分享部分就没看下去;在这里特别提出来,是这个问题真的困扰了很久,非常希望得到解决!若对部分泛型代码不理解,请看
http://bbs.itheima.com/thread-140070-1-1.html
作者:
迷失的独白
时间:
2014-8-30 20:28
本帖最后由 迷失的独白 于 2014-8-31 00:09 编辑
http://blog.csdn.net/lonelyroamer/article/details/7868820
看这里吧,看了一半,困了,先睡了
//靠,刚才明明是这句话这报的错啊
我现在只知道错误出现在这里
v2.add(1);//这里
v.add("abc");
System.out.println(v.get(0));//这里,单独注释掉就不会报错
System.out.println(v.get(1));
System.out.println(v);
ArrayList<Integer>
如果用for(Integer in : a)迭代的话,就会报转换异常
得到类名也会报转换异常
a.add(1);
a2.add("abc");
a2.add(new Person());
System.out.println(a.get(0));
System.out.println(a.get(0).getClass().getName());
System.out.println(a.get(1));
System.out.println(a.get(1).getClass().getName());
System.out.println(a.get(2));
System.out.println(a.get(2).getClass().getName());
System.out.println(a);
作者:
笑脸迷人
时间:
2014-8-30 20:53
迷失的独白 发表于 2014-8-30 20:28
你应该听了反射那段了吧,当二进制码被加载进内存中时,虚拟机忽略了泛型
但那是在反射,因为要加载二进制 ...
11行不报错~~
报错的是19行代码
作者:
Fightin黑马
时间:
2014-8-30 21:37
等着解答,想了半天没想明白:Q
作者:
玥夜
时间:
2014-8-31 08:33
搞不懂 想了半天 卤煮知道了告诉我一下啊
作者:
安茹黑马
时间:
2014-8-31 12:28
想了半天,也不知道是什么原因,希望有大牛解答
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2