以下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错误
原因是什么以及如何解决?
答案 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)。