什么是Java上的"T ..."?

VIB*_*azo 8 java generics syntax libgdx

查看libgdx上Array类的方法.我找到了这个方法:

public void addAll (T... array) {
    addAll(array, 0, array.length);
}
Run Code Online (Sandbox Code Playgroud)

我之前从未见过"T ...",事实证明,在谷歌或Stack Overflow上搜索"T ..."非常困难.我想我理解泛型,但"......"对我来说是新的.

那是什么意思?因此,例如,如果T是String,那么我将如何使用此方法?我为什么要用它?那怎么会与使用"T []"不同呢?

Jon*_*eet 24

T...只是一个varargs参数,其中元素类型恰好是T类的泛型类型参数.

关键是你可以像这样调用方法(假设array是一个Array<String>):

array.addAll("x", "y", "z");
Run Code Online (Sandbox Code Playgroud)

这相当于

array.addAll(new String[] { "x", "y", "z" });
Run Code Online (Sandbox Code Playgroud)

这也可以在没有泛型的情况下使用.例如:

public static int sum(int... elements) {
    int total = 0;
    for (int element : elements) {
        total += element;
    }
    return total;
}
Run Code Online (Sandbox Code Playgroud)

Varargs参数在Java 5中引入.

  • @SnakeDoc:已经注意到它是一个通用的类型参数,但如果你读到这个问题,他会谈到"如果T是字符串",这表明了对泛型的理解,它也标记为"泛型". (5认同)
  • T虽然是泛型的一部分,但在这种情况下,它与varargs一起使用. (3认同)
  • @SnakeDoc:是的,但我认为这是OP不理解的varargs位. (2认同)

eve*_*ton 7

这里有两个不相关的东西:

首先,这可能是一个使用泛型的类,所以它T是一个参数化类型.

其次,T...参数声明是一个varargs