groovy中java类的metaClass属性

时间:2012-01-13 23:39:58

标签: java groovy metaprogramming

我正在学习groovy,我对其元编程设施有疑问。根据我的理解,groovy中的每个对象都实现了groovy.lang.GroovyObject接口(由groovy编译器隐式添加)。后一个接口包含方法getMetaClass(),所以我可以执行以下操作:

class MyGroovyClass{
}
def myGroovyClass = new MyGroovyClass();
println myGroovyClass.metaClass.name

我不理解的是java编译器(如java.lang.String)编译的对象如何获取metaClass属性。这个属性是在实际的MetaClass对象中定义的,它通过MetaClassRegistry与java类相关联吗?

2 个答案:

答案 0 :(得分:3)

除了通过元对象协议添加的方法之外,Groovy还使用groovy.runtime.DefaultGroovyMethods类中定义的其他方法来扩充JDK中的类。 List和其他集合会获得eachcollect等方法。相同的机制会向getMetaClass添加java.lang.Object方法。

答案 1 :(得分:1)

正确,POJO在注册表中查找了它们的元类。

This presentation提供了Groovy和POJ对象如何使用元类的高级概述。 (但需要注意的是它有点老了。)