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]