Groovy Mixin on Instance (Динамический миксин) - PullRequest
6 голосов
/ 21 марта 2010

Я пытаюсь добиться следующего:

class A {
  def foo() { "foo" }
}

class B {
  def bar() { "bar" }
}

A.mixin B
def a = new A()

a.foo() + a.bar()

с одним существенным отличием - я хотел бы сделать миксин в экземпляре:

a.mixin B

, но это приводит к

groovy.lang.MissingMethodException: No signature of method: A.mixin() is applicable for argument types: (java.lang.Class) values: [class B]

Есть ли способ заставить это работать, как предложено в Groovy Mixins JSR ?

1 Ответ

8 голосов
/ 21 марта 2010

Вы можете сделать это начиная с Groovy 1.6

Вызовите mixin для экземпляра metaClass примерно так:

class A {
  def foo() { "foo" }
}

class B {
  def bar() { "bar" }
}

def a = new A()
a.metaClass.mixin B

a.foo() + a.bar()
...