这是我要调用/调用的方法.
public static <N,E> void doGenericStatic2(N number, E element) {
System.out.println(number);
System.out.println(element);
}
Run Code Online (Sandbox Code Playgroud)
这是我测试调用前一个方法的方法(两者都位于同一个类中MyClass)
public static void testInvokeGenericMethodLocally() {
doGenericStatic2(100, "Text");
// <Integer,String>doGenericStatic2(100, "Text"); //Syntax error, insert "super ( ) ;" to complete Statement
MyClass.doGenericStatic2(100, "Text");
MyClass.<Integer,String>doGenericStatic2(100, "Text");
}
Run Code Online (Sandbox Code Playgroud)
为什么这种特殊情况(第二次调用测试)会<Integer,String>doGenericStatic2(100, "Text");产生编译时错误?
JLS 15.12对此进行了描述,它描述了方法调用语法:
MethodInvocation:
MethodName ( [ArgumentList] )
TypeName . [TypeArguments] Identifier ( [ArgumentList] )
ExpressionName . [TypeArguments] Identifier ( [ArgumentList] )
Primary . [TypeArguments] Identifier ( [ArgumentList] )
super . [TypeArguments] Identifier ( [ArgumentList] )
TypeName . super . [TypeArguments] Identifier ( [ArgumentList] )
Run Code Online (Sandbox Code Playgroud)
请注意,该[TypeArguments]选项仅当该方法出现在“点状事物”(我对它的技术名称)之后时才可用。JLS 没有具体说明为什么会这样,尽管 Thomas 的评论可能是正确的,否则对于<TypeArguments 开始还是小于会产生歧义。