首页 > 解决方案 > 是什么使泛型类型参数的名称泛型?

问题描述

我正在为自己写一本 java 手册,我喜欢把确凿的事实放进去。我似乎无法描述泛型类型参数。我想知道什么名称显示为编译器的泛型类型而不是现有对象。我知道约定是字母“T”和其他单个字母。但我在 oracle.docs.com 中看到了一个类似的示例:

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

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

class Boby{ ... }

然后,如果我创建一个方法并将类的名称输入到 Bob 中:

void Method(Bob parameter){}

这只是编译并且参数成为泛型类型吗?

标签: javagenerics

解决方案


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

顺便说一句,如果您声明泛型类型参数Boby,它将隐藏类名,因此在定义该泛型类型参数的范围内(在整个类中或在单个方法中)Boby写入任何地方都将引用泛型类型参数,BobyBoby上课。

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
}

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


推荐阅读