2

我正在阅读 Java Specification for subtyping and cast 我知道 S <: T 表示 S 是 T 的子类型。但是,我不明白 |S| 是什么 <: |T| 方法?例如在这种情况下:

一个类型参数是类型变量或通配符,其上限(来自捕获转换,如有必要)为 S;并且另一个类型参数 T 不是类型变量或通配符;也没有|S| <: |T| 也不 |T| <: |S|。

|T| 是 T 参考的类型?它是指T的类吗?

4

1 回答 1

3

符号“|T|” 表示类型“T”的类型擦除,根据JLS 第 4.6 节中类型擦除的定义。

类型擦除是从类型(可能包括参数化类型和类型变量)到类型(从不参数化类型或类型变量)的映射。我们写 |T| 用于类型 T 的擦除。擦除映射定义如下:

  • 参数化类型(§4.5)G的擦除是|G|。

  • 嵌套类型 TC 的擦除是 |T|.C。

  • 数组类型 T[] 的擦除是 |T|[]。

  • 类型变量的擦除(第 4.4 节)是其最左边界的擦除。

  • 所有其他类型的擦除都是类型本身。

所以,“|S| <: |T|” 意味着 S 的擦除是 T 的擦除的一个子类型。

于 2015-09-03T17:15:13.993 回答