如何显式地为Java泛型方法给定类型参数的语法是什么?
以下内容不是语法
<ArgType>genericMethod()
看起来类型参数必须跟在点号后面,就像这样
SomeClass.<ArgType>genericMethod()
this.<ArgType>genericMethod()
p.<ArgType>genericMethod()
super.<ArgType>genericMethod()
SomeClass.super.<ArgType>genericMethod()
SomeClass.this.<ArgType>genericMethod()
According to the Java specification that would be for example:
Collections.<String>unmodifiableSet()
(很抱歉我要问自己并回答自己的问题 - 我已经第三次查找这个了。:-)
)一个很好的示例是来自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[]{});
import static
方法,这个怎么处理?它没有与类或this
绑定,正如你所说,第一种语法不起作用。请问该怎么办? - CodererSomeClass.<ArgType>genericMethod()
。如果您没有导入该类,则需要使用类的完整限定名。我相信您已经知道这一点,并希望得到一个更令人满意的答案。个人认为,为何不能将<ArgType>genericMethod()
语法添加到语言中呢?它是否会产生歧义? - Theodore Norvellimport static pack.MyClass.someMethod; someMethod();
切换到了import pack.MyClass; MyClass.<ArgType>someMethod()
,但当然它仍然比你在答案中提供的“希望这个能工作”的反例更冗长。 - Coderer