关于以下“泛型”代码感到困惑

6
我似乎无法完全理解以下语句。 T[] toArray( T[] a );
尽管我理解以上语句是一个函数的声明,该函数应该能够接受并返回T类型对象的数组......但我不明白为什么:
1-两个T没有被< >括起来。
2-似乎有两个返回类型,即和T[]。
3个回答

6

<T> 不是返回类型,而是方法使用的泛型类型参数的声明。一旦声明,可以在方法签名中使用它而不需要 <>


2
它被包围在<>中,因为这是它的格式定义。 - biziclop
那么,我是否可以在不使用第一个<T>的情况下编写相同的声明,然后只需用<>将其他两个T括起来?例如,我能否使用<T>[] toArray(<T>[] a);来声明上述内容? - Grateful
@Grateful 不,那不是正确的Java语法。如果该方法是属于声明了泛型参数T的类(public class SomeClass<T>),你可以在方法声明中省略 <T>,但其他两个T保持不变。 - Eran
哦,我明白了!但是我想在那个类定义中,如果要谈论某种集合,仍然需要使用尖括号。因此,虽然我可以省略T[] toArray( T[] a );这样的内容中的括号,但对于ListIterator<T> listIterator();,我仍然需要有括号。 - Grateful
@Grateful ListIterator<T><> 的另一种用法。在这里,您指定了 ListIterator 将返回的数据类型。它可以是任何类型(例如 ListIterator<String>),不一定是先前声明的泛型类型参数。 - Eran

1
  1. 声明该方法是由T参数化的,与包含类不同。尖括号是语法的一部分,而不是变量名。

  2. 与1相同,<>不是返回类型。


0

返回类型是T[]而不是<T>。这表示该方法是一种通用类型,实现应相应地处理类型。

两个未被<>包围的T是输入参数类型和返回类型。在这种情况下,两者都应该相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接