2015-01-16 2 views
4

Я использую систему сборки Grails 2.3.8 для создания моего проекта Grails (т. Е. Системы по умолчанию, построенной поверх Gant).Почему аннотация @Override не работает при создании проекта Grails?

Когда я комментирую свои методы с помощью @ java.lang.Override, Grails не подводит компиляцию, даже если метод не переопределяет ничего в родительских классах.

Когда я скомпилирую непосредственно с помощью groovyc, все работает нормально.

Есть ли способ компиляции, который я не включил? :)

+0

не делает ни одного ухода о способности @Override, кроме меня? Или это огромная ошибка пользователя? Пожалуйста, просветите меня. :) –

ответ

5

Grails 2.3.8 использует Groovy 2.1.9. В этой версии Groovy @Override аннотации не соблюдаются в (по крайней мере) ситуациях я использовал его (самый основной случай):

class A { 
     def foo() {} 
} 


class B extends A { 
     @Override 
     def foo(String s) {} 

} 

В этой версии Groovy (2.1.9) выше код компилируется просто отлично.

Затем я загрузил последнюю версию Groovy (на данный момент, 2.4.1) и попробовал компиляцию того же класса. Компилятор бросил ошибку, как я ожидал:

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
foo.groovy: 7: Method 'foo' from class 'B' does not override method from its superclass or interfaces but is annotated with @Override. 
@ line 7, column 2. 
     @Override 
    ^

1 error 

UPDATE: Там на самом деле два способа, в которых даже Groovy 2.1.9 отличия @Override:

  1. Если модификатор доступа не соответствует (общественности, защищенные, частные)
  2. Если тип метода возврата не соответствует
+0

Я ошибаюсь, или класс класса B не действительно переопределяет класс A? B # foo имеет параметр, но A # foo - нет. –

+1

@CharlesWood вы правы, и именно так этот код показывает, что хотя бы одна версия Groovy (2.1.9) не обрабатывает аннотацию '@ Override' правильно. Компиляция должна всегда терпеть неудачу (но Groovy 2.1.9 не делает), поскольку B # foo не переопределяет A # foo, но B # foo имеет набор аннотаций @ @ Override. Версия 2.4.1 Groovy корректно обрабатывает: компиляция не выполняется. –

+0

Ах, я неправильно понял ваше сообщение :) –

Смежные вопросы