我正在阅读 Java Specification for subtyping and cast 我知道 S <: T 表示 S 是 T 的子类型。但是,我不明白 |S| 是什么 <: |T| 方法?例如在这种情况下:
一个类型参数是类型变量或通配符,其上限(来自捕获转换,如有必要)为 S;并且另一个类型参数 T 不是类型变量或通配符;也没有|S| <: |T| 也不 |T| <: |S|。
|T| 是 T 参考的类型?它是指T的类吗?
我正在阅读 Java Specification for subtyping and cast 我知道 S <: T 表示 S 是 T 的子类型。但是,我不明白 |S| 是什么 <: |T| 方法?例如在这种情况下:
一个类型参数是类型变量或通配符,其上限(来自捕获转换,如有必要)为 S;并且另一个类型参数 T 不是类型变量或通配符;也没有|S| <: |T| 也不 |T| <: |S|。
|T| 是 T 参考的类型?它是指T的类吗?
符号“|T|” 表示类型“T”的类型擦除,根据JLS 第 4.6 节中类型擦除的定义。
类型擦除是从类型(可能包括参数化类型和类型变量)到类型(从不参数化类型或类型变量)的映射。我们写 |T| 用于类型 T 的擦除。擦除映射定义如下:
参数化类型(§4.5)G的擦除是|G|。
嵌套类型 TC 的擦除是 |T|.C。
数组类型 T[] 的擦除是 |T|[]。
类型变量的擦除(第 4.4 节)是其最左边界的擦除。
所有其他类型的擦除都是类型本身。
所以,“|S| <: |T|” 意味着 S 的擦除是 T 的擦除的一个子类型。