Попробуйте переформатировать его следующим образом:
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 продолжить синтаксический анализ утверждения.Кроме того, вы можете поставить открывающую скобку в конце строки (то есть стандартный стиль кодирования Java ).