2010-03-21 23 views
6

aşağıdaki ulaşmak için çalışıyorum: Bir önemli fark ileGroovy Mixin (Dinamik Mixin)

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

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

A.mixin B 
def a = new A() 

a.foo() + a.bar() 

- Ben örneğinde mixin yapmak istiyorum:

a.mixin B 

ama Bu Groovy Mixins JSR önerilen gibi çalışan bu almanın bir yolu var mı

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

sonuçlanır?

cevap

8

Öyle gibi örnek metaclass

Groovy 1.6 beri Çağrı mixin bunu yapabilirsiniz:

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

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

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

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

Teşekkür çok Tim! Groovy 1.7.1 Grails'in bir parçası olana kadar biraz beklemek zorundayım (1.3'teki umalım) ... – david

+1

Sadece denedim ve 1.6.3'te de çalışıyor (ki bu inovasyonun versiyonu olduğuna inanıyorum) grails 1.2 kullanır) :-) –

+1

Evet, bu özellik Groovy 1.6 eklenmiştir http://www.infoq.com/articles/groovy-1-6 –