未知类型:METHOD_DEF运行groovy脚本时

时间:2010-10-20 18:00:32

标签: groovy

以下groovy脚本无法编译

import java.util.concurrent.Callable

println "b";
Callable<String> callable = new Callable<String>()
      {
        String call() {
          println("C");
          return null;
        }
      };

这是错误:

  

org.codehaus.groovy.control.MultipleCompilationErrorsException:   启动失败:C:\ tmp \ a.groovy:6:   未知类型:METHOD_DEF at line:6   列:9。文件:C:\ tmp \ a.groovy @   第6行,第9行。              字符串调用(){              ^

     

1错误

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

1 个答案:

答案 0 :(得分:1)

尝试重新格式化:

import java.util.concurrent.Callable

println "b";
Callable<String> callable = new Callable<String>() \
    { 
        String call() {
            println("C");
            return null;
        }
    };

因为分号是可选的,所以groovy对换行符很敏感,偶尔以一种意外的方式解析语句。在这种情况下,它认为Callable<String> callable = new Callable<String>()是一个完整的语句。 Java很聪明,可以看到它是一个匿名的内部类,因为该语句没有在行的末尾终止,但第一行是语法正确的groovy并停止解析。

解决方案是使用反斜杠转义换行符,以强制groovy继续解析语句。或者,您可以将左大括号放在行尾(即standard java coding style)。