未知类型:运行groovy脚本时的方法_DEF

未知类型:运行groovy脚本时的方法_DEF,groovy,Groovy,以下groovy脚本未编译 import java.util.concurrent.Callable println "b"; Callable<String> callable = new Callable<String>() { String call() { println("C"); return null; } }; import java.util.concur

以下groovy脚本未编译

import java.util.concurrent.Callable

println "b";
Callable<String> callable = new Callable<String>()
      {
        String call() {
          println("C");
          return null;
        }
      };
import java.util.concurrent.Callable
println“b”;
Callable Callable=new Callable()
{
字符串调用(){
println(“C”);
返回null;
}
};
这就是错误:

org.codehaus.groovy.control.multipleCompationerErrorSexception: 启动失败:C:\tmp\a.groovy:6: 未知类型:第6行的方法_DEF 专栏:9。文件:C:\tmp\a.groovy@ 第6行,c列9。 字符串调用(){ ^

1错误


原因是什么以及如何解决?

请尝试按以下方式重新格式化:

import java.util.concurrent.Callable

println "b";
Callable<String> callable = new Callable<String>() \
    { 
        String call() {
            println("C");
            return null;
        }
    };
import java.util.concurrent.Callable
println“b”;
Callable Callable=new Callable()\
{ 
字符串调用(){
println(“C”);
返回null;
}
};
因为分号是可选的,所以groovy对换行符很敏感,偶尔会以意外的方式解析语句是一个完整的语句。Java足够聪明,可以看到它是一个匿名的内部类,因为该语句没有在行的末尾终止,但第一行是语法正确的groovy并停止解析


解决方案是用反斜杠转义换行,迫使groovy继续解析语句。或者,您可以将大括号放在行的末尾(即)。

谢谢!我有点怀疑“分号在groovy中是可选的”,现在我明白了,我不相信这个是对的。不,没有必要不相信它…你只是碰巧遇到了极少数会破坏它的案例之一。我必须更新我的Groovy版本才能工作(我不知道我当时使用的是1.1版)。谢谢。