本文最后更新于 303 天前,其中的信息可能已经有所发展或是发生改变。
泛型
介绍
- 泛型(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代码
- 适配JVM
原理
- 在编译阶段,java编译器会移除所有的泛型类型,并使用类型边界或Object替换
规则
- 如果泛型类型有上界(extends),则泛型擦除为其上界类型
- 如果泛型类型有下界(super),则泛型擦除为Object
- 如果泛型类型没有上界,则泛型擦除为Object