日期:2014-05-20  浏览次数:20711 次

List和List<Object>有区别么?
RT~

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

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



------解决方案--------------------
类型擦除,就是变成jdk1.4之前的样子
------解决方案--------------------
不一样,一个是泛型,一个是Object,后者还可能要类型转换,容易出错。
------解决方案--------------------
探讨
引用:

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


啊。。。那个 没经历过那个年代。。大侠请问1.4之前的List里面是不是都是Object啊?那是不是List<Object>就相当于1.4之前的了?

------解决方案--------------------
比如说:
1
List list = new ArrayList();
这时候 list什么都能add进去, list1.add(a); list1.add(stu);

2
List<Student> list = new ArrayList<Student>();
但是这时候list 只能add Student 这个对象。不能add其它的。
这有一个好处,就是在取的时候不用类型强制转换,也不容易出错。

------解决方案--------------------
List<Object>
放的是Object和原本的List一样
如果是List<String>那就只能放String
------解决方案--------------------
泛型只是在编译时起作用,运行时是没有泛型信息的。也就是说:源文件当中的List<Object>和List<String>被javac编译器编译完成以后,jvm在运行时看到的都只是List。
Java code

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

------解决方案--------------------
Java code

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。