aşağıdaki kod Groovy sınıfta varolan yöntemi yerine çalıştı:Varolan nesne için groovy yöntemini değiştirmek mümkün mü?
class A {
void abc() {
println "original"
}
}
x= new A()
x.abc()
A.metaClass.abc={-> println "new" }
x.abc()
A.metaClass.methods.findAll{it.name=="abc"}.each { println "Method $it"}
new A().abc()
Ve aşağıdaki çıkışı sonuçlanır:
original
original
Method [email protected][name: abc params: [] returns: class java.lang.Object owner: class A]
Method public void A.abc()
new
bu anlamına mı geliyor bunu ayarlayarak metaclass değiştirdiğinizde Kapatma, gerçekten yerine geçmez ama sadece arayabileceği başka bir yöntem ekler, böylece iki yönteme sahip metaclass elde edilir? Yöntemi gerçekten değiştirmek mümkün mü, ikinci çıktı satırı "yeni" yazıyor mu? onu anlamaya çalışırken
, ben DelegatingMetaClass yardımcı olabileceğini bulundu - En Groovy yolu budur yapmak o?
teşekkürler - Groovy sınıfı mevcut bir yöntemi geçersiz kılmak için kullanabilir çalışıyorum, bu yüzden orijinal sınıfını değiştirerek önlemek için çalışıyorum. –