泛型使用
只能使用对象,不能用基本数据类型
泛型无多态,但数据有多态
泛型类
写在类后面:
HashMap:
1 | public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V> { |
泛型接口
1 | public interface List<E> extends ...... |
泛型方法
写在返回值前:
1 |
|
使用可变参数:
1 | public <A> void argsMethod(A ... args) |
创建泛型实例
1 | // JDK7 之前的写法: |
泛型的通配符和上下界
泛型标记符
运行时没有区别,只是名字不同
常见的约定:
E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
泛型通配符 ?
表示类型不确定,配合上下界使用
- 通配符
?
不能用在泛型的实例化中:
1 | void print(List<?> list) |
上界下界
闭区间
上界: extends:
表示泛型最高类型是 Animal ,只能是它或它的子类
1 | Coll<? extends Animal> |
下界 super:
表示泛型最低类型是 Dog 。只能是它或它的父类
1 | Coll<? super Dog> |
泛型擦除
泛型只在编译时起作用,运行时泛型还是被当成 Object 来处理
泛型的参数 E 运行时是 Object 类型