【笔记】Java的泛型
前言
Java的泛型
定义类时使用泛型
- 在类名后通过
<>定义泛型 - 泛型又被称为类型参数
1 | class Cls<T> { |
定义多个
1 | class Cls<T, S> { |
创建对象时指定类型
1 | Cls<String> cls = new Cls<String>(""); |
通过钻石运算符自动推导类型
1 | Cls<String> cls = new Cls<>(""); |
指定匹配所有类型
1 | Cls<?> cls = new Cls<>(""); |
定义方法时指定泛型
- 在返回值类型前通过
<>定义泛型
1 | <T> T method(T t) { |
抽象类使用泛型
继承抽象类时使用泛型
1 | abstract class Father<T> { |
将抽象类的泛型继承下来
1 | abstract class Father<T> { |
接口使用泛型
实现接口时使用泛型
1 | interface Father<T> { |
将接口的泛型继承下来
1 | interface Father<T> { |
限制泛型界限
- 限制泛型界限又被称为有界类型参数
上界
- 通过
extends关键字限制泛型只能是指定类及其子类 extends可以用于通配符,也可以用于类型参数
定义类时使用泛型
1 | class Cls<T extends Father> {} |
创建对象时指定泛型
1 | Cls<? extends Father> cls = new Cls<>(); |
定义方法时使用泛型
1 | <T extends Father> T method(T t) { |
下界
- 通过
super关键字限制泛型只能是指定类及其父类 super只能用于通配符,不能用于类型参数
创建对象时指定泛型
1 | Cls<? super Son> cls = new Cls<>(); |