Groovy Mixin on Instance (Dynamic Mixin)

Я пытаюсь добиться следующих результатов:

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

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

A.mixin B
def a = new A()

a.foo() + a.bar()

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

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

Вы можете сделать это, так как Groovy 1.6

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

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

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

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

a.foo() + a.bar()