Я не понимаю, почему создаются объекты HandleMetaClass, и когда добавляются новые атрибуты и методы, вновь созданный объект HandleMetaClass заменяется другим экземпляром объекта.Почему this.metaclass отличается от a.aclass.
import groovy.transform.Trait
import org.codehaus.groovy.runtime.HandleMetaClass
import org.codehaus.groovy.runtime.InvokerHelper
class Person {
def test() {
def a = this
def b = a
println "a.metaClass-------->>>" + a.metaClass
println "b.metaClass-------->>>" + b.metaClass
println "this.metaClass-------->>>" + this.metaClass
}
}
def person = new Person()
//println person.saysd()
println "Person.metaClass-------->>>" + Person.metaClass
println "person.metaClass-------->>>" + person.metaClass
person.test()
person.metaClass.d="@"
println "person.metaClass-------->>>" + person.metaClass
def newperson = new Person()
println "newperson.metaClass-------->>>" + person.metaClass
Вывод выглядит следующим образом:
Person.metaClass-------->>>org.codehaus.groovy.runtime.HandleMetaClass@21e360a[groovy.lang.MetaClassImpl@21e360a[class Person]]
person.metaClass-------->>>org.codehaus.groovy.runtime.HandleMetaClass@21e360a[groovy.lang.MetaClassImpl@21e360a[class Person]]
a.metaClass-------->>>org.codehaus.groovy.runtime.HandleMetaClass@21e360a[groovy.lang.MetaClassImpl@21e360a[class Person]]
b.metaClass-------->>>org.codehaus.groovy.runtime.HandleMetaClass@21e360a[groovy.lang.MetaClassImpl@21e360a[class Person]]
this.metaClass-------->>>groovy.lang.MetaClassImpl@21e360a[class Person]
person.metaClass-------->>>org.codehaus.groovy.runtime.HandleMetaClass@1b11171f[groovy.lang.ExpandoMetaClass@1b11171f[class Person]]
newperson.metaClass-------->>>org.codehaus.groovy.runtime.HandleMetaClass@1b11171f[groovy.lang.ExpandoMetaClass@1b11171f[class Person]]