为什么构建Grails项目时@Override注释不起作用?

Vah*_*deh 5 grails groovy

我正在使用Grails 2.3.8构建系统来构建我的Grails项目(即,构建在Gant之上的默认系统).

当我用@ java.lang.Override注释我的方法时,即使该方法在父类中没有覆盖任何内容,Grails也不会使编译失败.

当我使用groovyc直接编译时,一切正常.

是否有我没有启用的编译选项?:)

Vah*_*deh 6

Grails 2.3.8使用Groovy 2.1.9.在那个版本的Groovy中,@ Override注释在(至少)我使用它的情况(最基本的情况)中不受尊重:

class A {
        def foo() {}
}


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

}
Run Code Online (Sandbox Code Playgroud)

在那个版本的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
Run Code Online (Sandbox Code Playgroud)

更新:实际上,即使是Groovy 2.1.9,也有两种方式来表达@Override:

  1. 如果访问修饰符不匹配(public,protected,private)
  2. 如果方法返回类型不匹配