10

<T>以下代码段中的含义是什么?

class Test {    
     <T> void say() {

     }    
}
4

3 回答 3

14

在您的示例中,这确实没有意义。但在其他情况下,如果方法的返回类型为 void,<T>仍然可以用作预期的泛型参数类型。考虑这个

public static <T> void test(List<T> list1, List<T> list2) {
    list1.addAll(list2);
}

public static void main(String[] args) throws Exception {
    test(Arrays.asList(1, 1), Arrays.asList("1", "1"));
}

类型安全控制,javac 给出错误,test() 需要相同类型的列表。

另一个例子 java.util.Collections.fill

public static <T> void fill(List<? super T> list, T obj) {
    ....
}    

再次键入安全控制。

于 2013-01-10T15:14:57.110 回答
8

它引入了一个类型占位符,T几乎可以是任何类型。T如果是签名的一部分(作为参数或返回类型),这通常很有用:

<T> void say(T myT) {}
say<Object>(myObject);
say<String>(myString);

<U> U foo(U u) { return u; }
String s = foo<String>("");

仅仅为了内部使用而引入类型参数很少有用,因为T对于消费者来说,实际通常比方法更有趣。

于 2013-01-10T15:01:13.737 回答
3

请参阅this doc about generics in java

但只有在参数列表中有参数化类型时它才有用。

于 2013-01-10T15:02:39.370 回答