groovy如何为Java类添加新方法?

Ksh*_*rma 5 groovy

请考虑以下代码段 -

println String.class
Run Code Online (Sandbox Code Playgroud)

输出是 -

class java.lang.String
Run Code Online (Sandbox Code Playgroud)

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

println String.methods.size()
Run Code Online (Sandbox Code Playgroud)

methods 不是Java类的成员.

这种魔力是如何发生的?

tim*_*tes 6

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

从标准文件 -

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