类型变量和参数的定义

use*_*614 4 java generics definition

我正在使用Java语言规范第三版阅读Java中的泛型.在" 4.6擦除 " 部分中,定义了擦除类型.关于类型变量的擦除,它说

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

这使我对类型变量类型参数之间的区别感到困惑,因为" 4.4类型变量 "部分具有以下定义:TypeParameter: TypeVariable TypeBound其中bound是可选的.但是,也许你可以认同它出现在因为类型变量只能(?)出现在一个"背景"的类型参数,然后一个类型变量类型变量最左边的约束被定义为最左边的束缚其相应类型的参数或公司Object在case类型参数中是否没有显式绑定?

Ser*_*abe 6

如果没有为类型变量给出绑定,则假定为Object.

在您的链接中找到.这意味着给定的FirstClass<T extends String>,SecondClass<V>你得到了:

  1. 类:FirstClass类型参数:T extends String.类型变量:T.类型绑定:String.
  2. 类:SecondClass类型参数:V类型变量:V.类型绑定:默认为Object.

编辑:类型参数,类型变量类型绑定我不是指语法规则,而是概念.因此,extends只是关键字.

关于最左边的边界你可以在同一个链接中找到答案,第一个引用后的两个句子:

绑定中类型的顺序仅在于,类型变量的擦除由其边界中的第一个类型确定,并且类类型或类型变量可能仅出现在第一个位置.