Groovy :: @Mixin方法覆盖目标类方法

时间:2011-02-23 05:51:10

标签: groovy mixins

class A {  
  def test() { println "parent" }  
} 

@Mixin(A)  
class B {  
  def test() { println "child" }  
} 

new B().test() // prints "parent", but I am expecting it to print "child"

这看起来像某种反向继承。

mixins仅用作定义新方法的手段吗?

我当然可以使用常规继承并使用extends,但是用例需要一个表单构建器,其中每个域都有一个唯一的表单实现,我想在我的应用程序控制器中捕获表单请求并执行MyUniqueDomainForm .mixin DefaultFormMethods(所以我只需要在需要时定义默认方法,而不必在每个表单类中导入my.package.app.DefaultFormMethods)

1 个答案:

答案 0 :(得分:2)

无论你mixin会使已经存在的任何东西超载......

在此示例中,在编译时B.test()重载继承的A.test()方法

但是在运行时,A.test()通过mixin添加,重新重载先前重载的方法

如果不是这样,你将无法使用mixins改变课程的现有特征

ie(这是一个愚蠢的例子,但我相信它得到了我的观点):

class AddNotMinus {
  static def minus( int a, int b ) {
     a + b
  }
}

Integer.mixin AddNotMinus
println 10 - 10

打印20