一个泛型集合的问题

编程指南针
Java领域优质创作者
博客专家认证
2009-07-30 03:16:01
       List<Integer> list = new ArrayList<Integer>();
list.add(1);

List aa = list;
aa.add("bb");

System.out.println("value:"+list.get(1));


想问一下为何list里已经确定了只存Integer,通过aa添加的字符串类型bb仍然能够通过list.get(1)读出来
...全文
189 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbug9002 2009-08-12
  • 打赏
  • 举报
回复
这种现象好象是叫类型的擦除。

http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.6

英文不好,你自己看看吧。
编程指南针 2009-08-12
  • 打赏
  • 举报
回复
至今没人给出一个合理的解释啊
ChDw 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 whirlwind526 的回复:]
       List <Integer> list = new ArrayList <Integer>();
list.add(1);

List aa = list;
aa.add("bb");

    System.out.println("value:"+list.get(1));


想问一下为何list里已经确定了只存Integer,通过aa添加的字符串类型bb仍然能够通过list.get(1)读出来
[/Quote]

因为这个确定只是编译器限制,并不是运行时限制。所以在实际运行中是没有影响的
aywrenyue 2009-07-30
  • 打赏
  • 举报
回复
[Quote=引用楼主 whirlwind526 的回复:]
List <Integer> list = new ArrayList <Integer>();
list.add(1);

List aa = list;
aa.add("bb");

    System.out.println("value:"+list.get(1));


想问一下为何list里已经确定了只存Integer,通过aa添加的字符串类型bb仍然能够通过list.get(1)读出来
[/Quote]


你能通过list.get(1)读出来吗?
不会抛异常吗?
musecangying007 2009-07-30
  • 打赏
  • 举报
回复
泛型是与具体的List对象绑定的,不是与List类绑定的
closewbq 2009-07-30
  • 打赏
  • 举报
回复
泛型的意思就是约束有泛型的对象。
zhuzhusany 2009-07-30
  • 打赏
  • 举报
回复
List aa = list;

aa没有指定泛型,当然如果list.add("bb");是会错的
knightzhuwei 2009-07-30
  • 打赏
  • 举报
回复
晕 泛型是和具体的List对象绑定的 不是和List类绑定的 你的list是指定了泛型 但是aa并没有指定泛型啊。。
ty_fzpb 2009-07-30
  • 打赏
  • 举报
回复
晕倒! 自己看
hahapigzhu 2009-07-30
  • 打赏
  • 举报
回复
因为你是对aa添加字符串,而aa没有指定是Integer,list才是Integer

62,614

社区成员

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

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