Неизвестный тип: METHOD_DEF при запуске скрипта Groovy - PullRequest
0 голосов
/ 20 октября 2010

Следующий скрипт 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 в строке: 6 столбец: 9. Файл: C: \ tmp \ a.groovy @ строка 6, столбец 9. Строка вызова () { ^

1 ошибка

В чем причина и как ее устранить?

1 Ответ

1 голос
/ 20 октября 2010

Попробуйте переформатировать его следующим образом:

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 ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...