首页 文章

Groovy - 使用def参数调用方法失败,出现“非法类名”

提问于
浏览
8

我希望得到一个解释,为什么调用这个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

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

更新了更多信息:

这是在Windows上使用Groovy 2.4.5 JVM 1.8.0_51

整个脚本是名为1.groovy的文件中的那9行 - 没有别的 .

我使用“groovy 1.groovy”从控制台(cmdr)运行它

第8行的错误是:

抓到:java.lang.ClassFormatError:类文件中的非法类名“3 $ f2”3 $ f2 java.lang.ClassFormatError:类文件中的非法类名“3 $ f2”3.run中的3 $ f2(3.groovy) :8)

1 回答

  • 16

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

    当你使用没有类型的 f2(n) 时,因为这个方法是"too generic",Groovy试图找到一个匹配的方法,或一个名为 f2 的类,或一个名为f2的内部类:加载类 1 的内部类 f2 失败,因为名称是无效 .

相关问题