小编Mic*_*l M的帖子

向接口元类添加方法仅有效一次

因此,向接口元类添加方法会将其添加到接口实现 \xe2\x80\x93 的每个实例中,但仅一次。将方法添加到每个实现类中每次都可以进行更改。

\n\n

在重新分配方法之间清理元类似乎没有改变任何东西。

\n\n

这是一个可运行的示例:

\n\n
interface X {}\nclass A implements X {}\nclass B implements X {}\n\nX.metaClass.test = { println "v1" }\nnew A().test()\nnew B().test()\n\nX.metaClass.test = { println "v2" }\nnew A().test()\nnew B().test()\n\nA.metaClass.test = { println "v3" }\nB.metaClass.test = { println "v3" }\n\nnew A().test()\nnew B().test()\n\nA.metaClass.test = { println "v4" }\nB.metaClass.test = { println "v4" }\n\nnew A().test()\nnew B().test()\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果是:

\n\n
v1\nv1\nv1\nv1\nv3\nv3\nv4\nv4\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是有意的行为吗?如果是这样,那为什么呢?或者这是一个错误?

\n

groovy metaprogramming

5
推荐指数
1
解决办法
233
查看次数

标签 统计

groovy ×1

metaprogramming ×1