微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JLS 的 TypeParameter 产品中的标识符实际上是 TypeVariable 吗?

如何解决JLS 的 TypeParameter 产品中的标识符实际上是 TypeVariable 吗?

我正在阅读 JLS,Java SE 8 版,但我被困在关于类型变量的部分。

It reads

类型变量是在类中用作类型的非限定标识符, 接口、方法和构造函数体。

类型变量是通过类型参数的声明引入的 泛型类、接口、方法或构造函数(第 8.1.2 节、第 9.1.2 节、 §8.4.4,§8.8.4).

TypeParameter: 
  {TypeParameterModifier} Identifier [TypeBound] 

TypeParameterModifier: 
  Annotation 

TypeBound: 
  extends TypeVariable 
  extends ClassOrInterfaceType {AdditionalBound}

AdditionalBound: 
  & InterfaceType

[...]

每个声明为类型参数的类型变量都有一个界限。如果不 bound 是为类型变量声明的,假定为 Object。如果一个界 被声明,它包括

  • 单类型变量 T,或
  • 一个类或接口类型 T 可能后跟接口类型 I_1 & ... & I_n。

重新排列引号

  • 类型变量是一个不合格的标识符(来自上面)
  • 每个声明为类型参数的类型变量都有一个界限。(来自上面)
  • 在类的类型参数部分,如果 S 是 T 的边界,则类型变量 T 直接依赖于类型变量 S(来自部分 8.1.

对我来说——如果我的理解是正确的——让 TypeParameter 产生式如下:

TypeParameter: 
  {TypeParameterModifier} TypeVariable [TypeBound] 

毕竟,TypeVariable 已经定义为

TypeVariable:
  {Annotation} Identifier 

我的理解 - JLS 为 Identifier 制作的 TypeParameter 实际上是 TypeVariable - 正确还是我在这里遗漏了什么?

这部分是关于类型变量的,这让我很困惑,解释性文本也提到了类型变量,但是当我尝试将制作与我联系起来时,文本似乎在谈论 Identifier (因此我的问题)。

现在的方式,阅读此作品中的 Identifier,向我表明这是 TypeParameter 而不是 TypeVariable 的标识符,这对我来说表明这些应该是两个不同的东西。这是什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。