Java-泛型
一个变量可能会需要有多种类型, 一个处理方法是将其定义成Object
类, 用强制类型转换解决。
但是可能会有非法的转换行为出现, 不会在编译阶段报错, 而会在程序运行时出错。
通过泛型可以在编译阶段禁止非法的强制类型转换, 提高安全性, 其本质仍是Object
类的强制类型转换。
泛型类定义
一般后面的构造方法的钻石通配符内内容可以省略。
1 |
|
泛型的处理是在编译器层面。 编译器将泛型的使用转换成强制类型转换的方法。
T
是一个Object
类, 通过强制类型转换来实现泛型类。
泛型方法
静态泛型方法定义:
1 |
|
泛型用于接口
定义与定义泛型类类似。
使用有两种。 一种是接口实现具体类型, 一种为泛型类继承泛型接口。
1 |
|
1 |
|
其他局限和特点
不能用于基本类型
泛型本质是Object
类的强制类型转换, 是针对对象, 而不是基本类型。
只能用于非静态成员
在实际创建对象前泛型的类型是不确定的, 因此不能定义为静态成员。
? 通配符
匹配任意类型, 默认类型为Object
。
上下界
用 extends
和 super
来设定上下界。
1 |
|
设定上界后 ?
通配符为上界类型。
设定下界后 ?
通配符仍为Object
类。