泛型
基本类型的封装
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
泛型指代
E 表示 Element
K 表示 Key
V 表示 Value
N 表示 Number
T 表示 Type
S, U, V 等等 - 第二、第三、第四个类型
静态类型
public class Util {
//静态的泛型方法 需要在static后用<>声明泛型类型参数
public static <E> void swap(E[] array, int i, int j) {
E t = array[i];
array[i] = array[j];
array[j] = t;
}
}
//使用类型推导
Integer[] a = { ... };
swap(a, 0, 9);
String[] b = { ... };
swap(b, 0, 9);
//不使用类型推导
Integer[] a = { ... };
Util.<Integer>swap(a, 0, 9);
String[] b = { ... };
Util.<String>swap(b, 0, 9);
泛型上界
//明确只能是边界类型或者边界类型的子类
class 泛型类名称<类型形参 extends 类型边界> {
...
}
//E必须是Number类或者其子类
public class MyArray<E extends Number> {
...
}
//E必须是实现了Comparable接口的
public class MyArray<E extends Comparable<E>> {
...
}
通配符
? extends 类 //设置通配符上限
? super 类 //设置通配符下限
上界示例
? extends 类 //设置通配符上限
<? extends Number>//可以传入的实参类型是Number或者Number的子类
下界示例
<? super 下界>
<? super Integer> //代表 可以传入的实参的类型是Integer或者Integer的父类类型