RednaxelaFX 发表于 2013-2-3 14:00:10

Java的泛型方法调用语法真是……诶

先看看Java语言规范第三版里方法调用表达式的语法规定:
MethodInvocation:    MethodName ( ArgumentListopt )    Primary . NonWildTypeArgumentsopt Identifier ( ArgumentListopt )    super . NonWildTypeArgumentsopt Identifier ( ArgumentListopt )    ClassName . super . NonWildTypeArgumentsopt Identifier ( ArgumentListopt )    TypeName . NonWildTypeArguments Identifier ( ArgumentListopt )

注意到NonWildTypeArguments出现的话前面必然有“点”。这意味着什么呢?
举例:把Arrays.asList静态引入进来:
import static java.util.Arrays.asList;public class Demo {    public static void main(String[] args) {      asList();    }}
由于没有传任何参数给asList()方法,所以原本声明为:
public static <T> List<T> asList(T... a)
就无从让编译器去推导泛型参数T的类型应该是什么。因而编译上面的Demo会得到一个警告:
<div class="quote_title">javac 写道
页: [1]
查看完整版本: Java的泛型方法调用语法真是……诶