groovy中java类的metaClass属性
我正在学习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类相关联吗?
除了通过元对象协议添加的方法之外,Groovy还使用groovy.runtime.DefaultGroovyMethods
类中定义的其他方法来扩充JDK中的类。 List
和其他集合获取each
方法并collect
。 相同的机制将一个getMetaClass
方法添加到java.lang.Object
。
正确的,POJO在注册表中查找了它们的元类。
此演示文稿提供了Groovy和POJ对象如何使用元类的高级概述。 (需要注意的是它有点老了。)