gpt4 book ai didi

dynamic - 每个对象的 Groovy 动态属性

转载 作者:行者123 更新时间:2023-12-02 17:21:01 24 4
gpt4 key购买 nike

使用 Groovy 1.8。我正在尝试创建一个动态类定义,它将缓存每个对象的属性。我确实使用了propertyMissing,但没有将属性添加到对象中。我只是认为缓存属性会更有效。对吗?

请注意,每个实例必须有自己不同的属性。

下面的代码工作正常:

class C {}
def c = new C()
c.metaClass.prop = "a C property"
println c.prop

def x = new C()
x.prop

将输出:

a C property
groovy.lang.MissingPropertyException: No such property: prop for class: C

如果我需要这样做有问题:

class A {
def propertyMissing(String name) {
if(!this.hasProperty(name)) {
println "create new propery $name"
this.metaClass."$name" = "Dyna prop $name"
println "created new propery $name"
}
this.metaClass."$name"
}
}

a = new A()
println a.p1

对于 A,我得到了“创建新属性”,但是 this.metaClass."$name"= "Dyna prop $name" 行失败其中:没有这样的属性:第 5 行的类的 p1

怎么了?

最佳答案

这段代码应该做你想要的:

class A {
A() {
def mc = new ExpandoMetaClass( A, false, true)
mc.initialize()
this.metaClass = mc
}

def propertyMissing( String name ) {
println "create new propery $name"
def result = "Dyna prop $name"
this.metaClass."$name" = result
println "created new propery $name"
result
}
}

a = new A()
println a.p1
println a.p1

输出:

create new propery p1
created new propery p1
Dyna prop p1
Dyna prop p1

关于dynamic - 每个对象的 Groovy 动态属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6568397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com