ग्रोवी 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"
विफल रहता है: No such property: p1 for class at line 5
क्या गलत?
अहा .. आप केवल कि संकलन समय पर .. बहुत बुरा कर सकते हैं। – Ayman
आप रनटाइम – Manny
के लिए रनटाइम मिश्रण का उपयोग कर सकते हैं "ब्लॉगपोस्ट" टूटी हुई लिंक को ठीक करना: http: // ब्लॉग।enfranchisedmind.com/2008/06/groovy-metaclass-bug/ –