我正在学习groovy,并且我有一个关于它的元编程设施的问题。据我所知,groovy中的每个对象实现了groovy.lang.GroovyObject接口(由groovy编译器隐式添加)。后者接口包含的方法getMetaClass(),所以我可以做到以下几点:groovy中的java类的metaClass属性
class MyGroovyClass{
}
def myGroovyClass = new MyGroovyClass();
println myGroovyClass.metaClass.name
,我不明白的是由Java编译器像java.lang.String中编译对象,如何获取元类属性的东西。这个属性是否在通过MetaClassRegistry与Java类相关的实际MetaClass对象中定义?
好的,但是如何在groovy.runtime.DefaultGroovyMethods中定义的这些方法被调用? groovy编译器是否显式查找对jdk类的方法调用并拦截这些以生成调用DefaultGroovyMethods中定义的方法的字节码?这是否意味着只有在jdk中定义的java类才能获得getMetaClass()方法? – 2012-01-14 00:25:08
@ JamesV.H。那么,Groovy对象显然拥有这个属性 - “获得方法”是什么意思? – 2012-01-14 00:34:05
@DaveNewton是的我明白在groovy中编译的对象具有属性,在那里没有问题。用java编译器编译的类显然没有属性,我们仍然可以调用它们的metaClass属性。 Ataylor评论了添加方法的定义(在DefaultGroovyMehods中),而不是关联机制如何工作。 – 2012-01-14 01:25:17