1. 什么是泛型
泛型是一个不确定类型的特殊类型,它在使用时才明确类型,这样的好处:
- 不用代码强转
- 把运行问题提前到了编译时期
2. 分类
- 泛型类
public class Object<T> {}
- 泛型方法
public void foo(T t) {}
- 泛型接口
public interface Inter<T> {}
- 明确泛型
public void foo(List<Sting> t) {}
- 不明确泛型
public void foo(T t) {}
3. 操作
现在有一个需求,把User类型放入集合中,然后遍历
没有使用泛型
ArrayList list = new ArrayList();
User user1 = new User();
User user2 = new User();
list.add(User1);
list.add(user2);
//这里容易发生错误,如果不小心把非User类型放入集合呢?这样只有运行时才知道错误,eg:
//list.add("一个非User类型");
for(user : list){
System.out.println(user);
}
使用了泛型
ArrayList<User> list = new ArrayList();
User user1 = new User();
User user2 = new User();
list.add(User1);
list.add(user2);
//下面直接报错,不能编译
list.add("一个非User类型");
//强调类型
for(User user : list){
System.out.println(users);
}
通配符及上下限:匹配任意类型
public void foo(List<?> list){}
public void foo(List<? extends String> list) {}
public void foo(List<? super E> list) {}