Masalahnya di sini adalah bahwa konsep Anda benar-benar cacat. Anda menetapkan peta ke Kelas dan bukan instance dengan baris ini:
User.metaClass.dynamicAttributes = [:]
Untuk mencapai apa yang ingin Anda lakukan, Anda perlu melakukan hal berikut:
User.metaClass.propertyMissing = { String name ->
if (!delegate.dynamicAttributes) delegate.dynamicAttributes = [:]
delegate.dynamicAttributes[name]
}
User.metaClass.propertyMissing = { String name, value ->
if (!delegate.dynamicAttributes) delegate.dynamicAttributes = [:]
delegate.dynamicAttributes[name] = value
}
Saya yakin ada cara yang lebih bersih untuk melakukan ini, tetapi cara di atas menunjukkan solusi di mana peta di-instance per instance dan tidak di semua instance.