泛型错误语法 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
元素总是必须跟在某些表达式之后,然后是 .
。它不能位于简单方法名称之前。
使用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
元素总是必须跟在某些表达式之后,然后是 .
。它不能位于简单方法名称之前。