Groovy 1.5的新特性
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:Groovy,针对JVM的类Java动态语言,主要增强了对于Java 5特征的支持,包括注解、泛型和枚举,框架包括Spring,Hibernate,JPA,Goole Guice或者TestNG。
与注解一样,由于产生了Java 5的字节码,Groovy中的枚举需要JDK 5+的环境才能运行。
静态导入
在前面关于枚举的例子中,我们始终需要在枚举值的前面加上它的父枚举类,但是通过静态导入(可以在JDK1.4运行时环境上工作)我们可以去掉Planet前缀,从而节省一些字符。
import static Planet.*SATURN.printMe()
这样就不再需要Planet前缀。当然,静态导入不仅仅对枚举有效,对其他类和静态成员变量同样有效。我们不妨作些数学计算。
import static java.lang.Math.*assert sin(PI / 6) + cos(PI / 3) == 1
java.lang.Math的静态方法和静态常量都被静态导入了,这样使得表达式更加简明。但是如果sine和cosine的缩写不便于你阅读,那么你可以使用Groovy中的as关键字来做别名:
import static java.lang.Math.PI
import static java.lang.Math.sin as sine
import static java.lang.Math.cos as cosine
assert sine(PI / 6) + cosine(PI / 3) == 1
别名不仅仅用于静态导入,也可以用于正常的导入,是很有用的方法。例如在很多框架中有名字非常长的类,可以使用别名来增加快捷记法,或者重命名名字不太直观的方法或者常量,或者重命名与你的命名约定标准不一致的方法或常量。
泛型
在Java 5中有争议的特性:泛型,也出现在Groovy 1.5的最新版本中。毕竟,开始的时候可能觉得在一个动态语言中加入更多类型信息是多余的。Java开发人员通常相信因为类型擦除(为了向后兼容Java以前的版本)使得在类的字节码中没有保留代表泛型的类型信息。然而,这是错误的看法,通过反射API,你可以内省一个类从而发现它的成员变量类型或者它的有泛型详细信息的方法参数类型。
来源:InfoQ中文站 作者:曹云飞 责编:豆豆技术应用