Wild FJ论文中类型变量和类型参数的区别?

Mat*_* S. 3 java generics types wildcard type-parameter

在 Torgersen 等人 2005 年的Wild FJ论文中,第 2 节和第 3 节的第一段使用了术语“类型参数”。然后3.1节第一句介绍了术语“类型变量”。考虑到讨论的上下文以及谷歌上缺乏信息,我只能猜测“类型变量”是用来专门指代通配符的。我非常确定,这是一篇“开创性”的论文,它导致了 Java 中通配符的实现。

编辑:非常感谢 deduper 为编辑我的问题付出的辛勤工作!

And*_*eas 7

在方法 中foo(int x),使用以下术语:

  • 该方法有 1 个形式参数( int x),但通常会缩写为参数,从而导致潜在的混乱。int参数类型x参数名称

  • x是一个参数变量,尽管它经常被缩写为参数,导致潜在的混乱。

  • 在调用中,foo(5)该值称为argument,尽管通常称为参数值,缩写为parameter,从而导致潜在的混淆。当需要澄清时,它被称为实际参数

正如您所看到的,参数一词的简写用法可以表示int xx5,具体取决于上下文。

对于泛型类型,Foo<X extends Number>使用类似的命名:

  • 该类型有 1 个类型参数,其中extends Number类型绑定X类型标识符

  • X是一个类型变量

  • 使用时,Foo<Integer>Integer部分称为类型参数。类型参数可以是通配符。

不要将方法parameter type与泛型混淆type parameter

正如您所看到的,您的结论“类型变量”用于专门指代通配符”是不正确的。类型变量指的是类型参数名称,无论类型参数是否绑定。

类型变量的“实际”类型(即类型参数)可以是也可以不是通配符,因为它是在泛型类型的使用中指定的,而不是在泛型类型的定义中指定的。

泛型类型变量仅在泛型类型的定义中引用,类似于方法参数变量仅在方法体中引用。