Groovy Mixin on Instance (Динамический миксин)

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

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 ответ

Решение

Вы можете сделать это начиная с 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()
Другие вопросы по тегам