RT~
还有我不太明白原始类型的意思。
List<T>被擦除的时候是擦除成List?还是List<Object>?
------解决方案--------------------
类型擦除,就是变成jdk1.4之前的样子
------解决方案--------------------
不一样,一个是泛型,一个是Object,后者还可能要类型转换,容易出错。
------解决方案--------------------
------解决方案--------------------
比如说:
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。