package chapter6;
import java.util.ArrayList;
import java.util.List;
public class ListNoGeneric {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
// 段落一
List a1 = new ArrayList();
a1.add(new Object());
a1.add(new Integer(1));
a1.add(new String("a1"));
// 如果将 a1 改变成List<Object> 那么段落三会编译异常
// List<Object> a1 = new ArrayList();
// a1.add(new Object());
// a1.add(new Integer(1));
// a1.add(new String("a1"));
// 段落二 完美运行
List<Object> a2 = a1;
a2.add(new Object());
a2.add(new Integer(2));
a2.add(new String("a2"));
// 段落三
List<Integer> a3 = a1;
a3.add(3);
// 编译异常 因为添加了泛型约束,所以添加Intger以外的类型数据会异常
// a3.add(new Object());
// a3.add(new String("a2"));
// 段落四
/*
可以擦除与删除
不能使用add(Object o) 方法添加
可以用list.add(0, null) 添加数据(只能为添加null)
可以用list.addAll(a1) 来添加一个list。
*/
// List<?> a4 = a1;
// a1.remove(0);
// a4.clear();
// a4.add(new String("aaaaaaaaaaaaa"));
//引用类型不解释
// System.out.println(a1.size());
}
}
- List<T> 定义了数据类型约束,可以进行取值赋值操作,取值的时候用传入的数据类型接受就可以了。
- List<?> 没有明确的定义数据类型,不可以写入值,只能进行取值、clear、remove操作,取出后全部强转为Object类型。一般用来作为参数接受外部的集合,或者返回一个不知道具体类型元素的集合。
- List<Object> List 两个用起来没啥子差别,但是在将自己赋值给另一个的时候就要注意了。例如:
List l1 = new ArrayList(); l1.add("我欲乘风破浪"); //在运行的时候才会抛出异常 //java.lang.String cannot be cast to java.lang.Integer List<Integer> l2 = l1; List<Object> l3 = new ArrayList(); l1.add("我欲乘风破浪"); // 在编译的时候就会抛出异常 List<Integer> l4 = l3;
大概就是这样,有什么问题欢迎补充。