【发布时间】:2021-01-11 09:06:51
【问题描述】:
static void main(String[] args) {
ExpandoMetaClass.enableGlobally()
A a=new A()
add(a, "a", "a")
add(a,"a",1)
add(a,"a",new Date())
a.getProperties().entrySet().forEach({ entry -> println("${entry.getKey()} ${entry.getValue()}") })
}
static void add(A a, String key, Object value) {
if (a.hasProperty(key)) {
a.metaClass."${key}"=value
if (!Objects.equals(a.getProperty(key), value)) {
System.err.println("error,key:${key},value:${value}")
}
} else {
a.metaClass."${key}"=value
}
}
static class A{
}
输出:
error,key:a,value:Mon Jan 11 16:43:48 CST 2021
class class com.huya.TypeTest$A
a 1
add(a,"a",new Date())
似乎不起作用,我找不到任何关于它的问题。 以及“xx.metaClass.a=1”是如何工作的,有相关资料吗?
【问题讨论】:
-
您到底期待什么?你能描述一下你想要做什么吗?为什么没有元类就无法完成?
-
期望:第一次,a="a" then,a=1 last,a=new Date() 但是,第一次和第二次成功,第三次是失败,这是一个简单的分配
标签: java groovy metaprogramming