Java泛型
概述
泛型:参数化类型(将类型由原来的具体的类型参数化)。
特点:
- 适用于多种数据类型执行相同的代码。
- 使用泛型时,在实际使用之前类型就已经确定了,不需要强制类型转换。
- 泛型只在编译阶段有效。
泛型命名标识字母(常见字母):
- T Type
- K V Key Value
- E Element
简单使用
泛型类
1 |
|
泛型接口
1 |
|
泛型方法
1 |
|
类型擦除
类型擦除:Java 的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息。
泛型信息只存在于代码编译阶段,在进入 JVM 之前,与泛型相关的信息会被擦除掉。
上界&下界/协变&逆变
无界:通配符?,表示泛型类型是一个未知类型。
上界:上界通配符 extends,限制了泛型未知类型的上界。
下界:下界通配符 super,限制了泛型未知类型的下界。
型变:协变、逆变和不变的统称,用来描述类型转换后的继承关系。比如:Sub 是 Super 的子类型,List<Sub>是否是 List<Super>的子类型。
协变(covariance):满足 Sub 是 Super 的子类型,List<Sub>也是 List<? extends Super>的子类型。
逆变(covariance):满足 Sub 是 Super 的子类型,List<Super>也是 List<? super Sub>的子类型。
不变(invariance):表示 Sub 是 Super 的子类型,List<Sub>和 List<Super>不存在型变关系。
ps:子类(subclass)和子类型(subtype)不是同一个概念。子类说明了新类是继承自父类,而子类型强调的是新类具有父类一样的行为(未必是继承,还有可能是实现接口)。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!