关于List 的疑问

gujinwubo 2014-05-22 03:57:25
List list6=new ArrayList();
list6.add((char)33);
list6.add("sss");
List<?>list7 =new ArrayList();
list7=list6;
System.out.println(list7.get(0));
System.out.println(list7.get(0).getClass());
System.out.println(list7.get(1));
System.out.println(list7.get(1).getClass());

输出:

class java.lang.Character
sss
class java.lang.String

不是说无界通配符能保证其容器里面类型的一致性么,为什么这段代码能正确编译运行
...全文
177 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
alan19931103 2014-05-22
  • 打赏
  • 举报
回复
楼上都是正解。
grapepaul 2014-05-22
  • 打赏
  • 举报
回复
?等于所有Object,不限制的意思
姜小白- 2014-05-22
  • 打赏
  • 举报
回复
类型的一致性是由泛型决定的,直接使用通配符就相当于不添加泛型进去。后面的元素类型就没有限制了。 jdk7 的新特性中应该有父容器添加泛型后,子容器可以不添加泛型,但子容器的元素自动由父容器的泛型去限制。
kiyoki 2014-05-22
  • 打赏
  • 举报
回复
类型是Object,为什么不能通过?
gujinwubo 2014-05-22
  • 打赏
  • 举报
回复
list7这样初始化后面的代码也不会出错:List<?>list7 =new ArrayList<Integer>();
JAVA字符串和list集合的区别_[java]你到底知不知道ListList的区别 本文解析了ListList的区别,揭示了泛型的不可变性及List<>的通用性,探讨了两者在类型限制上的差异。通过实例说明,List只能持有Object类型的元素,而List则允许任意类型。关键在于泛型通配符的应用和类型安全的考量。

62,621

社区成员

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

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