List和List有区别么?
结贴是美德 2012-01-19 01:22:10
RT~

还有我不太明白原始类型的意思。

List<T>被擦除的时候是擦除成List?还是List<Object>?

...全文
2340 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
aotian16 2012-01-19
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 goldenfish1919 的回复:]

Java code

public static void main(String[] args)throws Exception {
List<Integer> list = new ArrayList<Integer>();
list.add(100);
Method method = list.getClass().getDeclaredM……
[/Quote]
长见识了
若鱼1919 2012-01-19
  • 打赏
  • 举报
回复

public static void main(String[] args)throws Exception {
List<Integer> list = new ArrayList<Integer>();
list.add(100);
Method method = list.getClass().getDeclaredMethod("add",Object.class);
method.invoke(list, "hello");
System.out.println(list);
}
//这个例子说明,运行时,jvm只是知道List里面装的是Object,虽然定义的时候规定了只能往里面放Integer,实际上我们还是可以往里面放String。
若鱼1919 2012-01-19
  • 打赏
  • 举报
回复
泛型只是在编译时起作用,运行时是没有泛型信息的。也就是说:源文件当中的List<Object>和List<String>被javac编译器编译完成以后,jvm在运行时看到的都只是List。

public void func(List<String> list){
}
public void func(List<Integer> list){
}

以上两个方法不是overload,不能在同一个类里面共存的,eclipse提示:
Method func(List<String>) has the same erasure func(List<E>) as another method in type GenericTest。

cscxxx 2012-01-19
  • 打赏
  • 举报
回复
List<Object>
放的是Object和原本的List一样
如果是List<String>那就只能放String
chc464954573 2012-01-19
  • 打赏
  • 举报
回复
比如说:
1
List list = new ArrayList();
这时候 list什么都能add进去, list1.add(a); list1.add(stu);

2
List<Student> list = new ArrayList<Student>();
但是这时候list 只能add Student 这个对象。不能add其它的。
这有一个好处,就是在取的时候不用类型强制转换,也不容易出错。
安特矮油 2012-01-19
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ihtml 的回复:]
引用 3 楼 goldenfish1919 的回复:

类型擦除,就是变成jdk1.4之前的样子


啊。。。那个 没经历过那个年代。。大侠请问1.4之前的List里面是不是都是Object啊?那是不是List<Object>就相当于1.4之前的了?
[/Quote]
差不多,以前维护的是个Object的数组。
gagalydia 2012-01-19
  • 打赏
  • 举报
回复
不一样,一个是泛型,一个是Object,后者还可能要类型转换,容易出错。
结贴是美德 2012-01-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 goldenfish1919 的回复:]

类型擦除,就是变成jdk1.4之前的样子
[/Quote]

啊。。。那个 没经历过那个年代。。大侠请问1.4之前的List里面是不是都是Object啊?那是不是List<Object>就相当于1.4之前的了?
  • 打赏
  • 举报
回复
转:
Java中的泛型是个假泛型,仅仅只是在编译器那边做了语法检查而已,和C#里的泛型不一样的。
基本上,不管你在List<>里面写什么类型,编译通过了以后运行时全部都是Object。
Java泛型是通过类型擦除实现的,编译器的语法检查是次要的,重要的是泛型系统可以为我们做更多的类型检查,这在很多时候是很有帮助的,借助编译器在编译期的类型检查可以减少运行时出现类型错误的几率。

另外thinking in java里也有仔细的讲解
chenliuyang 2012-01-19
  • 打赏
  • 举报
回复
写法上面的区别。
yaoweijq 2012-01-19
  • 打赏
  • 举报
回复
java中的所有对象类型都继承自object
擦除是擦除成object了
若鱼1919 2012-01-19
  • 打赏
  • 举报
回复
类型擦除,就是变成jdk1.4之前的样子
绝世酱油瓶 2012-01-19
  • 打赏
  • 举报
回复
确实没多大区别、如果在调用或声明创建一个泛型函数或结构时指定了类型,那么后续操作产生的结果将直接是你指定的类型。不必再进行转型操作了、这样写方便一点而已
Acesidonu 2012-01-19
  • 打赏
  • 举报
回复
个人觉得使用上没什么区别,只不过一个用了泛型

62,614

社区成员

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

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