很好奇GROOVY是如何在JAVA语言的基础上平添了如此之多的强大功能和语言特性。翻看了一些GROOVY的源代码。语言的特性,离不开语言底层模型的支持,在构建好自己的语言模型之后,接下来需要的就是形式化的东西,也就是语法,遵循语法编写代码,以用编译器构建出既定的语言模型体系下的字节码,然后再JVM机上无差别于JAVA代码一样运行,我理解的Groovy就是这样。
GROOVY可以作为脚本来运行,即Script对象,也可以作为类似JAVA的Class来运行,不管是以Script方式运行还是说作为Class方式。Groovy编译之后的类都是统一实现了GroovyObject接口。GroovyOjeject定义了invokeMethod方法,定义了属性的GETTER和SETTER方法,定义了元类的GETTER和SETTER方法等利用GROOVY语言特性的基本方法。GroovyOjeject为什么是接口不是类,原因在于Groovy最终编译成为java对象,JAVA对象不支持多继承,如果GroovyOjeject声明为类,而Groovy的class也必须继承直接或者间接继承自GroovyObject,这样,声明Groovy类就不能继承自其它的JAVA类了,这样就直接影响了GROOVY与JAVA的兼容性。
GROOVY语言模型中GroovyOjeject不是