2021SC@SDUSC
13.Groovy元编程源码分析
元编程相关的类呢,就都在lang包中。
首先,编程我们都知道是创建一些类,然后为类去写一些属性和方法,那元代表什么呢,其实,元就是一个特殊的属性,我们到源码里来看一下是那个属性。
public interface GroovyObject {
Object invokeMethod(String var1, Object var2);
Object getProperty(String var1);
void setProperty(String var1, Object var2);
MetaClass getMetaClass();
void setMetaClass(MetaClass var1);
}
这个类是Groovy最最基础的类,所有的类都实现了这一接口,我们可以看到一个getMetaClass和setMetaClass ,而MetaClass就是我们就所的元,通过操作MetaClass,就可以动态的在运行时,去改变类中的属性和方法所以我们可以得出结论,groovy中的所有类,都可以为其动态的去操作。因为这是个接口,下面我们看一下他的最重要的一个实现类:
public abstract class GroovyObjectSupport implements GroovyObject {
//所有类的MetaClass都是通过InvokerHelper获取到。
private transient MetaClass metaClass = InvokerHelper.getMetaClass(this.getClass());
public GroovyObjectSupport() {
}
//从元类中获取属性
public Object getProperty(String property) {
return this.getMetaClass().getProperty(this, property);
}
//为元类设置属性
public void setProperty(String property, Object newValue) {
this.getMetaClass()