泛型函数上的泛型错误语法Java 1.7

泛型函数上的泛型错误语法Java 1.7,java,generics,compiler-errors,syntax-error,Java,Generics,Compiler Errors,Syntax Error,使用Java1.7编译器,有趣的是,调用泛型函数的语法非常特殊。它强制您使用此引用通用函数 例如,对于定义为以下内容的函数: private <T> Object genericFunction(T t){ //function code } 私有对象泛型函数(T){ //功能代码 } 引用时,下面给出了一个语法错误: Object o = <ClassName>genericFunction(ClassName t); objecto=genericFun

使用Java1.7编译器,有趣的是,调用泛型函数的语法非常特殊。它强制您使用
引用通用函数

例如,对于定义为以下内容的函数:

private <T> Object genericFunction(T t){
    //function code
}
私有对象泛型函数(T){
//功能代码
}
引用时,下面给出了一个语法错误:

Object o = <ClassName>genericFunction(ClassName t);
objecto=genericFunction(类名t);
虽然以下各项是可以接受的:

Object o = this.<ClassName>genericFunction(ClassName t);
objecto=this.genericsfunction(类名t);
为什么会这样?这不是两个都需要吗?

这是客户的要求

方法调用:

  • 方法名([ArgumentList])
  • 打字名。[TypeArguments]标识符([ArgumentList])
  • ExpressionName。[TypeArguments]标识符([ArgumentList])
  • 小学。[TypeArguments]标识符([ArgumentList])
  • 太好了。[TypeArguments]标识符([ArgumentList])
  • 打字名。超级的。[TypeArguments]标识符([ArgumentList])

TypeArguments
元素必须始终位于某个表达式之后,后跟一个
。它不能在一个简单的方法名之前出现。

可能是因为它更难解析,因为它看起来像一个比较。为什么要提供类型见证?是的,这很烦人。一定有一些技术上的困难。而且好处可能不是很大,因为在大多数情况下,类型是可以推断的。你为什么说它是必需的?我可以用1.7编译器调用一个泛型函数,如下所示:Object o=genericFunction(s)其中s是一个字符串,泛型函数的定义与您在示例中所做的相同。但是如果您在函数调用中使用泛型见证,它将不允许您将它放在它前面,除非您有一个表达式后跟一个
,如果它不是必需的,那不是很好吗?@jadieldermas我并不介意。您几乎不需要提供它(至少从Java8开始)。@jadieldermas为什么需要
?它应该从参数中推断出来。@chrylis:你是对的,在我的例子中不需要证人。@jadieldermas C#是你最好的选择。