java - 什么使泛型类型参数的名称成为泛型?

标签 java generics

我正在为自己写一本 Java 手册,我喜欢在其中加入可靠的事实。 我似乎无法描述泛型类型参数。我想知道什么名称对编译器显示为泛型类型而不是现有对象。我知道惯例是字母“T”和其他单个字母。但是我在 oracle.docs.com 中看到了这样一个例子:

class name<T1, T2, ..., Tn>{}

所以现在我很困惑。对于将名称作为泛型类型参数的编译器,是否必须没有具有该名称的现有类? 如果我有一个类 Boby:

class Boby{ ... }

然后,如果我创建一个方法并将类名错误地输入给 Bob:

void Method(Bob parameter){}

这会不会只是编译并且参数变成泛型类型?

最佳答案

任何名称都可以是泛型类型参数。如果声明泛型类型参数 Bob,并使用该名称代替预期的类名 Boby,编译器会将其识别为泛型类型参数。

顺便说一句,如果你声明一个泛型类型参数Boby,它会隐藏类名Boby,所以在范围内的任何地方写Boby在定义泛型类型参数的地方(在整个类中或在单个方法中)将引用泛型类型参数,而不是 Boby 类。

class Something<Bob> {
    void Method1(Bob parameter){} // refers to the generic type parameter Bob

    void Method2(Boby parameter){} // refers to the Boby class
}

class Something<Boby> {
    void Method(Boby parameter){} // refers to the generic type parameter Boby,
                                  // hiding the Boby class
}

class Something<T> {
    void Method(Bob parameter){} // compilation error - Bob is an undefined symbol
}

也就是说,为了使您的代码更具可读性,最好使用单个大写字母作为类型参数名称。

关于java - 什么使泛型类型参数的名称成为泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53613345/

相关文章:

java - Maven 项目中没有报告语言

c# - 通用列表 - 在列表中移动一个项目

c# - 如何动态调用通用扩展方法?

generics - 类型级编程中的协变

generics - 实例化具有对变体记录的子类型访问权限的包时出现问题

java - 我可以将类放在通用类声明中吗?

java - 导出运行 JavaFX Scene3D 的 X Display

java - 错误 App Engine Java 标准环境 JRE8 需要 Java 1.8

Java(反)序列化过程

java - SQL Access 从两个表中选择 NOT IN