请考虑以下代码段 -
println String.class
输出是 -
class java.lang.String
我期待String的一些子类,因为它包含许多不属于Java类的成员。例如 -
println String.methods.size()
methods
不是Java类的成员。
这种魔力是如何发生的?
答案 0 :(得分:6)
Groovy有一个元类注册表。当您在类上调用方法时,将检查注册表以查看该类实例是否存在metaClass扩展方法。
从标准文档 -
每个groovy对象都有一个metaClass,用于管理动态 语言的本质。该类拦截对groovy对象的调用 确保可以添加适当的grooviness。 Source