Groovy - 使用 def 参数调用方法失败,并显示"非法类名"



我希望能得到一个解释,解释为什么对这个Groovy方法的调用能像预期的那样工作:

def f1(int n) {
  return n + 1
}
println f1(1) // -> 2

但是,如果参数没有明确定义("def n"而不是"int n"),则方法调用需要更改:

def f2(def n) {
  return n + 1
}
println f2(1) // Exception: Illegal class name
println this.&f2(1) // -> 2

引擎盖下发生了什么使这成为必要?

更新更多信息:

这是在带有Groovy 2.4.5 JVM 1.8.0_51 的Windows上

整个脚本是一个名为1.groovy的文件中的9行,没有其他内容。

我使用"groovy1.groovy"从控制台(cmdr)运行这个

第8行的错误为:

捕获:java.lang.ClassFormatError:类文件3$f2中的类名"3$f2"非法java.lang.ClassFormatError:类文件3$f2中的类名"3$f2"非法在3.run(3.groovy:8)

这与脚本的名称有关。当您有一个文件"1.groovy"时,groovy会在默认包中生成一个名为"1"的类,这不是一个有效的类名。

当您在不带类型的情况下使用f2(n)时,由于此方法"太通用",Groovy会尝试找到匹配的方法,或名为f2的类或名为f2的内部类:加载类1的内部类f2失败,因为名称无效。

相关内容

最新更新