泛型的擦除问题

AnonymousMonkey 2017-09-01 11:20:14
部分源代码:
ArrayList<String> al = new ArrayList<String>();
al.add("nihao");
String str = al.get(0);
经过反编译
ArrayList al = new ArrayList();
al.add("nihao");
String str = (String)al.get(0);
可以看出编译器编译时会检查泛型指定的类型是否正确,然后会泛型擦除,编译器在使用集合元素的地方,默认又增加了强制类型转换。但往里添加"nihao"字符串,是默认转换成了Object类型?还是String类型? 如果是String类型,为什么还要加入强转
...全文
240 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Timor_D 2017-09-11
  • 打赏
  • 举报
回复
可以直接查看API,其中的get方法就会很清楚了,它返回的是 一个Object类型的值,所以要转成String类型, 加泛型后,相当于固定了参数类型,调用的时候就不存在转型了
AnonymousMonkey 2017-09-07
  • 打赏
  • 举报
回复
非常感谢各位的回答!
壹四 2017-09-02
  • 打赏
  • 举报
回复
底层维护的是object数组
soton_dolphin 2017-09-01
  • 打赏
  • 举报
回复
擦除以后全部型参都没有了,全部都是Object 类
水春星繁 2017-09-01
  • 打赏
  • 举报
回复
查看源码知道,ArrayList底层是一个Object数组,Object 类型可以存放任意类型的数据,所以存放时候不需要强转,取出的时候因为取出的是object类型,所以需要强转

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧