关于Java泛型的问题,知道的请进!!!

Kilnn 2012-08-16 08:55:38
在看到类型擦除的时候,有点疑惑。
举个例子:
ArrayList<String> arrayList=new ArrayList<String>();
arrayList.add("123")//这个地方必须是字符串
为什么不可以是其他类型,不是说在编译的时候类型擦除了吗,那么,它的原始类型应该为Object,那么为什么add方法的参数不可以是其他的类型?
...全文
260 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kilnn 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

引用 14 楼 的回复:

你都确定了String了,怎么能放别的类型呢?


++
[/Quote]
这是因为是在编译之前检查,才不能放其余的类型。之前不知道,现在明白了。
xian_99223 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

你都确定了String了,怎么能放别的类型呢?
[/Quote]

++
zenglingshu 2012-08-17
  • 打赏
  • 举报
回复
泛型是在编译时检查,在运行时擦除。
ArrayList<String> arrayList=new ArrayList<String>();编译时即指定了arrayList的类型是ArrayList<String>,list中存储的元素类型是String,因此放入其他非String类型的数据时会报编译错误。运行时arrayList的类型变成原生态类型ArrayList。
AngelWings 2012-08-17
  • 打赏
  • 举报
回复
你都确定了String了,怎么能放别的类型呢?
Kilnn 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

ArrayList<?> 应该用问好代替就可以擦除了吧
[/Quote]
ArrayList<?> 这个我只在类型检查的时候看到
array instanceof ArrayList<?>
肯定也是类型擦除之后,不能使用ArrayList<String> 、ArrayList<Integer>这样的写法。
这个是在运行时检查的,。所以采用特出的写法
lizhuquan_bona 2012-08-17
  • 打赏
  • 举报
回复
ArrayList<?> 应该用问好代替就可以擦除了吧
风中云 2012-08-17
  • 打赏
  • 举报
回复
编译前检查
xiaomsds 2012-08-17
  • 打赏
  • 举报
回复
擦除?
zqfddqr 2012-08-17
  • 打赏
  • 举报
回复
就是这样
Kilnn 2012-08-16
  • 打赏
  • 举报
回复
哎 ,2了,可以想的到的是,在eclipse中arrayList.add(123),直接就会有错误,这不就是说明吗,这是在编译之前检查的吗?
是不是这样的
Kilnn 2012-08-16
  • 打赏
  • 举报
回复
这个到底是什么样的呢?有没有准确的说法?我去瞄瞄编程思想
孤独人生 2012-08-16
  • 打赏
  • 举报
回复
我记得编程思想里面说的是在变异的时候,就会记录下具体的类型
wangdong20 2012-08-16
  • 打赏
  • 举报
回复
泛型的优点在于能够在编译时而不是在运行时检测错误
CCAV521 2012-08-16
  • 打赏
  • 举报
回复
刚才瞅了一下核心技术 在java5.0以前这个是不检查的
arrayList.add(123); 这个是可以执行的
但是在从arrayList中取这个值的时候会有错误 因此我觉着也是跟上面那哥们说的一样
先检查编译是否有错在执行
Kilnn 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

我猜先检查编译错误,如:泛型类型不一致。
然后再擦除继续编译。。。
[/Quote]
这个编译不是一行一行的进行吗?
不过如果真是你说的,倒是真是这样。在线继续等高手来指导下。
scbb 2012-08-16
  • 打赏
  • 举报
回复
我猜先检查编译错误,如:泛型类型不一致。
然后再擦除继续编译。。。

62,616

社区成员

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

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