把GroovyC编译出来的class文件再用jad反编译,可以看到如何用Java去实现一门动态语言。
主要是多了一个MetaClass, 不断的反射反射,运行时还非常依赖Asm
最简单的例子:
Groovy文件:
public class Customer
{
private String id;
}
编译出来的Java文件
public class Customer implements GroovyObject
{
private String id;
transient MetaClass metaClass;
public Customer()
{
Object obj = ScriptBytecodeAdapter.invokeStaticMethod ("org.codehaus.groovy.runtime.ScriptBytecodeAdapter", "getMetaClass", this);
Metaclass metaclass = (MetaClass)ScriptBytecodeAdapter.asType(obj, groovy.lang.MetaClass.class);
}
public Object invokeMethod(String s, Object obj) {
}
public Object getProperty(String s) {
.}