5

考虑以下片段 -

println String.class

输出是 -

class java.lang.String

我期待 String 的某个子类,因为它包含许多不属于 Java 类的成员。例如 -

println String.methods.size()

methods不是 Java 类的成员。

这种魔法是如何发生的?

4

1 回答 1

6

Groovy 有一个元类注册表。当您在类上调用方法时,会检查注册表以查看该类实例是否存在元类扩展方法。

从标准文档 -

每个 groovy 对象都有一个元类,用于管理语言的动态特性。此类拦截对 groovy 对象的调用,以确保可以添加适当的 grooviness。资源

于 2013-07-30T12:29:04.783 回答