为什么这个元类只在构造函数执行后修改值


class EmailAssist {
    def abcService = "abc"
    String name
    EmailAssist(String name) {
        this.name = name
        println abcService
    }
    EmailAssist() {
    }
}
EmailAssist.metaClass.getAbcService = {->
    "test"
}
def e = new EmailAssist("Joe")
println e.abcService

这导致输出

abc
test

我认为这会导致

test
test

谁能解释一下这到底是什么? 元类是否仅在构造函数执行后修改,而不是覆盖构造函数方法?

如果您在定义字段的类(不是内部/嵌套类,不是开放块)中,并且您使用限定或非限定this访问该字段,则直接完成访问而不考虑 MOP。因此,不能以这种方式重影字段。由于此逻辑由编译器和文字完成,而不是按值完成,因此您可以通过def tmp = this; tmp.abcService绕过它

最新更新