深入探索Groovy元编程与DSL实现
1. Groovy元类概述
元类是使Groovy语言具有动态特性的关键因素。元类维护着Groovy类的所有元数据,包括可用的方法、字段和属性。与Java的Class对象不同,Groovy的元类允许在运行时动态添加字段和方法。
以下是访问元类的示例代码:
// Access Groovy meta class
def groovyMeta = Customer.metaClass
// Access Java meta class from 1.5
def javaMeta = String.metaClass
// Access Groovy meta class prior to 1.5
def javaMetaOld = GroovySystem.metaClassRegistry.getMetaClass(String)
Java类描述的是类的编译时行为,而元类描述的是类的运行时行为。我们无法改变对象的Class行为,但可以通过动态添加属性或方法来改变其元类行为。
2. 假装方法(MetaClass.invokeMethod)
Java和Groovy的一个重要区别在于,在Groovy中,方法调用不会直接调用类的方法。对象的方法调用首先会被分派到对象的 GroovyObject.invokeMethod() ,默认情况下,这会进一步转发到类的 MetaClass.invokeMethod() ,由元类负责查找实际的方法。这种间接分派是G
超级会员免费看
订阅专栏 解锁全文
76

被折叠的 条评论
为什么被折叠?



