【发布时间】:2010-06-10 08:27:05
【问题描述】:
为泛型 Java 方法显式提供类型参数的语法是什么?
【问题讨论】:
为泛型 Java 方法显式提供类型参数的语法是什么?
【问题讨论】:
【讨论】:
以下是不是的语法
<ArgType>genericMethod()
似乎类型参数必须跟在一个点之后
SomeClass.<ArgType>genericMethod()
this.<ArgType>genericMethod()
p.<ArgType>genericMethod()
super.<ArgType>genericMethod()
SomeClass.super.<ArgType>genericMethod()
SomeClass.this.<ArgType>genericMethod()
【讨论】:
import static 方法如何工作?它没有附加到类或this,并且正如您所说,列出的第一个语法不起作用。
SomeClass.<ArgType>genericMethod()。如果您没有导入该类,则使用该类的 FQN。我相信你知道这一点,并希望得到一个更令人满意的答案。就我个人而言,我不明白为什么不能将 <ArgType>genericMethod() 语法添加到语言中;它会产生歧义吗?
import static pack.MyClass.someMethod; someMethod();切换到import pack.MyClass; MyClass.<ArgType>someMethod(),但当然它仍然比你给出的“希望这有效”反例更冗长答案。
java.util.Collection 的一个很好的例子是指定一个定义自己的泛型类型的泛型方法是Collection.toArray,其中方法签名如下所示:
<T> T[] toArray(T[] a);
这声明了一个泛型类型 T,它在方法调用时由参数 T[] a 定义,并返回一个 T 数组。所以同一个实例可以以通用方式调用 toArray 方法:
Collection<Integer> collection = new ArrayList<Integer>();
collection.add(1);
collection.add(2);
// Call generic method returning Integer[]
Integer[] ints = collection.toArray(new Integer[]{});
// Call generic method again, this time returning an Number[] (Integer extends Number)
Number[] nums = collection.toArray(new Number[]{});
【讨论】: