使用意义
主要有两种用途
- 泛型方法主要用于容器类,Java中任何方法,包括静态的(注意,泛型类不允许在静态环境中使用)和非静态的,均可以用泛型来定义。泛型使编译器可以在编译期间对类型进行检查以提高类型安全,减少运行时由于对象类型不匹配引发的异常。
- 可以像传递参数那样,将类型像参数那样传递,这样就可以方便编译器进行安全检查。
实现原理
泛型的实现是靠类型擦除技术 类型擦除是在编译期完成的 也就是在编译期 编译器会将泛型的类型参数都擦除成它的限定类型,如果没有则擦除为object类型之后在获取的时候再强制类型转换为对应的类型。 在运行期间并没有泛型的任何信息,因此也没有优化。
分类
- 修饰限制方法, 修饰限制参数
- 修饰限制类
用例
泛型方法
- 需要在方法返回类型前使用泛型限定
- 在方法参数没使用泛型变量
- 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
- 泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char的等)
public static <T extends Comparable<T>> T maximum(T x, T y, T z){ return T; } |
泛型类
- 在类名后面添加了类型参数声明部分
- 可以声明多个泛型变量,泛型变量只能是引用类型。
public class Box<T> {} |
参数
通配符?
?可以用来表示某个具体的类型,可以使用 <? extend Box> 或 <? super Box>.分别表示某个类继承了box和box的某个父类
限定符T
所谓限定就是通过某些符号表示某一个类型,通过 implement ,extend super 来限制需要传输的类型参数