Sử dụng Groovy 1.8. Tôi đang cố gắng để tạo ra một định nghĩa lớp năng động sẽ cache thuộc tính cho mỗi đối tượng. Tôi đã sử dụng propertyMissing
mà không thêm thuộc tính vào đối tượng tốt. Tôi chỉ nghĩ rằng bộ nhớ đệm các thuộc tính sẽ hiệu quả hơn. Đúng?Thuộc tính động Groovy trên mỗi đối tượng
Lưu ý rằng mỗi cá thể phải có các thuộc tính khác nhau của riêng nó.
Đoạn code dưới đây hoạt động tốt:
class C {}
def c = new C()
c.metaClass.prop = "a C property"
println c.prop
def x = new C()
x.prop
chí đầu ra:
a C property
groovy.lang.MissingPropertyException: No such property: prop for class: C
Nếu tôi cần phải này còn gì phải bàn:
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
Đối A
, tôi nhận được như xa như " tạo thuộc tính mới ", nhưng dòng this.metaClass."$name" = "Dyna prop $name"
không thành công với: No such property: p1 for class at line 5
Có gì không ổn?
Aha .. Bạn chỉ có thể làm điều đó vào thời gian biên dịch .. quá tệ. – Ayman
Bạn có thể sử dụng Runtime mixin cho thời gian chạy – Manny
Sửa liên kết bị hỏng "blogpost": http: // blog.enfranchisedmind.com/2008/06/groovy-metaclass-bug/ –