泛型错误语法 Java 1.7 关于泛型函数

Generics error syntax Java 1.7 on generics function

使用Java 1.7 编译器,有趣的是,调用泛型函数所接受的语法非常特殊。它强制您使用 this 来引用泛型函数。

例如,函数定义为:

private <T> Object genericFunction(T t){
    //function code
}

引用时出现语法错误:

Object o = <ClassName>genericFunction(ClassName t);

同时接受以下内容:

Object o = this.<ClassName>genericFunction(ClassName t);

为什么会这样?不应该两者兼顾吗?

Java Language Specification 要求。

MethodInvocation:

  • MethodName ( [ArgumentList] )
  • TypeName . [TypeArguments] Identifier ( [ArgumentList] )
  • ExpressionName . [TypeArguments] Identifier ( [ArgumentList] )
  • Primary . [TypeArguments] Identifier ( [ArgumentList] )
  • super . [TypeArguments] Identifier ( [ArgumentList] )
  • TypeName . super . [TypeArguments] Identifier ( [ArgumentList] )

TypeArguments 元素总是必须跟在某些表达式之后,然后是 .。它不能位于简单方法名称之前。