因此,向接口元类添加方法会将其添加到接口实现 \xe2\x80\x93 的每个实例中,但仅一次。将方法添加到每个实现类中每次都可以进行更改。
\n\n在重新分配方法之间清理元类似乎没有改变任何东西。
\n\n这是一个可运行的示例:
\n\ninterface 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()\nRun Code Online (Sandbox Code Playgroud)\n\n结果是:
\n\nv1\nv1\nv1\nv1\nv3\nv3\nv4\nv4\nRun Code Online (Sandbox Code Playgroud)\n\n这是有意的行为吗?如果是这样,那为什么呢?或者这是一个错误?
\n