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) {}