我正在为自己写一本 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/