泛型
介绍
- 泛型(Generics),类型参数化,将所操作的数据类型指定为一个参数
标识符
标识符 |
描述 |
E |
表示集合等元素 |
T |
表示类型参数 |
K |
key |
V |
value |
N |
数据类型 |
? |
不确定类型 |
通配符
上限通配符
介绍
extends
,表示泛型类型的上限
- 规定泛型只能是某个类或接口的子类或实现类,或本身
示例
<T extends SuperClass>
<? extends SuperClass>
下限通配符
介绍
super
,表示泛型类型的下限
- 规定泛型只能是某个类的父类,或本身
- 下限通配符不支持指定泛型定义
示例
<? super SubClass>
泛型方法
介绍
参数类型
public static <E> void test(E num){
//....
}
返回值类型
public E getNum(E num){
return E;
}
泛型类
介绍
基本语法
public class MyClass<T>{
private T name;
}
实例化
MyClass<String> myClass = new MyClass<>();
泛型的比较
使用
- 继承Comparable
- 调用compareTo()方法
示例
public static <E extends Comparable<E>> comp(E a,E b){
a.compareTo(b);//0,1,-1
}
泛型擦除
作用
原理
- 在编译阶段,java编译器会移除所有的泛型类型,并使用类型边界或Object替换
规则
- 如果泛型类型有上界(extends),则泛型擦除为其上界类型
- 如果泛型类型有下界(super),则泛型擦除为Object
- 如果泛型类型没有上界,则泛型擦除为Object