【发布时间】:2018-12-04 20:57:54
【问题描述】:
我正在为自己编写 Java 手册,我喜欢在其中加入可靠的事实。 我似乎无法描述泛型类型参数。我想知道什么名称显示为编译器的泛型类型而不是现有对象。我知道约定是字母“T”和其他单个字母。但我在 oracle.docs.com 中看到了一个类似的示例:
class name<T1, T2, ..., Tn>{}
所以现在我很困惑。为了让编译器将名称作为泛型类型参数,必须只有没有具有该名称的现有类吗? 如果我有一个班鲍比:
class Boby{ ... }
然后,如果我创建一个方法并将类的名称输入到 Bob 中:
void Method(Bob parameter){}
这是否只是编译和参数成为泛型类型?
【问题讨论】:
-
<T1>将T1声明为泛型参数(Java 语言规范中的类型变量),如果Bob未声明为这样,它将不会被解释为一个(类似 到变量声明)。示例<Bob> void method(Bob parameter) -
你为什么不直接测试一下?对于一个泛型的方法,它必须声明它至少有一个泛型类型。为什么不尊重命名约定?这应该在您指南的最开始,早于泛型
-
您可以查看 JLS(Java 语言规范),它定义了通用参数以及如何处理名称冲突。通常,泛型参数必须在
<...>中声明,并且 IIRC 它优先于类名 - 这就是泛型类型通常命名为T、V、T2等的原因 - 因为类通常具有更长且更有意义名字。