2
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 是否仅用作定义新方法的一种手段?

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

4

1 回答 1

2

无论您mixin将超载什么已经存在的...

在这个例子中,在编译时B.test()重载了继承的A.test()方法

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

如果不是这样,您将无法使用以下方法更改类的现有特征mixins

即(这是一个愚蠢的例子,但我相信它明白了我的意思):

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

Integer.mixin AddNotMinus
println 10 - 10

印刷20

于 2011-02-23T08:32:09.037 回答