Groovy 1.5的新特性
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:Groovy,针对JVM的类Java动态语言,主要增强了对于Java 5特征的支持,包括注解、泛型和枚举,框架包括Spring,Hibernate,JPA,Goole Guice或者TestNG。
例如,当你声明了类型为List的成员变量时,这个信息是在字节码的某个地方以某种元信息的方式保存的,尽管这个成员变量确实仅仅是List类型的。这种反射信息被诸如JPA或者Hibernate这样的企业框架所使用,将一个元素的集合中的实体关联到代表这些元素的类型的实体。
为了实践这些理论,让我们检查泛型信息是否保存在类的成员变量中。
class Talk {
String title
}
class Speaker {
String name
List talks = []
}
def me = new Speaker(
name: 'Guillaume Laforge',
talks: [
new Talk(title: 'Groovy'),
new Talk(title: 'Grails')
])
def talksField = me.class.getDeclaredField('talks')
assert talksField.genericType.toString() ==
'java.util.Listt'
我们定义了两个类:一个在会议上给出Talk的Speaker类。在Speaker类中,talks属性的类型是List。然后,我们创建了一个Speaker实例,用两个优美的捷径来初始化name和talks属性,并创建了一个Talk实例的列表。当初始化代码就绪后,我们取得代表talks的成员变量,然后检查泛型信息是否正确:正确!talks是一个List,但是它是一个Talk的List。
共变的返回类型
在Java 5中,如果你在一个子类中有一个方法,其名称与参数类型与父类中的方法相同,但是返回值是父类方法的返回值的子类,那么我们可以覆盖父类的方法。在Groovy1.0中,不支持共变的返回类型。但是在Groovy1.5中,你可以使用共变返回类型。而且,如果你试图覆盖一个方法而返回类型不是父类方法的返回类型的子类,将抛出一个编译错误。共变的返回类型对于参数化的类型同样有效。
来源:InfoQ中文站 作者:曹云飞 责编:豆豆技术应用