<T>
在以下代码段中表示什么?
class Test {
<T> void say() {
}
}
答案 0 :(得分:11)
在你的例子中它确实没有意义。但在其他情况下,如果方法的返回类型为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) {
....
}
再次输入安全控制。
答案 1 :(得分: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
通常比方法更有趣。
答案 2 :(得分:2)
请参阅this doc about generics in java
但只有在参数列表中有参数化类型时才有用。