2010-03-21 15 views
6

que estoy tratando de lograr lo siguiente:maravilloso Mixin de Instancia (Dynamic Mixin)

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

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

A.mixin B 
def a = new A() 

a.foo() + a.bar() 

con una diferencia significativa - Me gustaría hacer el mixin en la instancia:

a.mixin B 

pero esto se traduce en

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

¿hay una manera de conseguir este trabajo, como se propone en el Groovy Mixins JSR?

Respuesta

8

Puede hacerlo desde Groovy 1.6

mixin de llamadas en las MetaClass ejemplo, así:

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

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

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

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

Muchas gracias Tim! Así que tengo que esperar un poco hasta que Groovy 1.7.1 sea parte de Grails (esperemos en 1.3) ... – david

+1

Acabo de probarlo, y funciona también en 1.6.3 (que creo que es la versión de groovy que usos de Grails 1.2) :-) –

+1

Sí, esta característica se agregó en Groovy 1.6 http://www.infoq.com/articles/groovy-1-6 –