2010-03-21 32 views
6

Tôi đang cố gắng để đạt được như sau:Groovy Mixin trên Instance (Dynamic Mixin)

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

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

A.mixin B 
def a = new A() 

a.foo() + a.bar() 

với một sự khác biệt đáng kể - Tôi muốn làm mixin trên dụ:

a.mixin B 

nhưng kết quả này trong

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

Có cách nào để làm việc này như được đề xuất trong Groovy Mixins JSR không?

Trả lời

8

Bạn có thể làm điều này kể từ Groovy 1,6

Gọi mixin trên metaclass dụ như vậy:

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

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

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

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

Thanks a lot Tim! Vì vậy, tôi phải chờ một chút cho đến khi Groovy 1.7.1 là một phần của Grails (hãy hy vọng trong 1.3) ... – david

+1

Chỉ cần thử nó ra, và nó hoạt động trong 1.6.3 là tốt (mà tôi tin là phiên bản của groovy grails 1.2 sử dụng) :-) –

+1

Có, tính năng này đã được thêm vào trong Groovy 1.6 http://www.infoq.com/articles/groovy-1-6 –