Groovy 1.5的新特性
http://tech.ddvip.com 2008年01月22日 社区交流
内容摘要:Groovy,针对JVM的类Java动态语言,主要增强了对于Java 5特征的支持,包括注解、泛型和枚举,框架包括Spring,Hibernate,JPA,Goole Guice或者TestNG。
int sum(int... someInts) {
def total = 0
for (int i = 0; i < someInts.size(); i++)
total += someInts[i]
return total
}
assert sum(1) == 1
assert sum(1, 2) == 3
assert sum(1, 2, 3) == 6
这个例子中所用的断言显示了我们如何传入任意多的int类型的参数。还有一个有趣的地方,为了更好的兼容Java语法,Java中经典的循环方式也加入了Groovy中 —— 尽管在groovy中更有groovy特色的循环是用in关键字,同样可以透明地遍历各种各样的数组或者集合类型。
请注意使用一个数组作为最后一个参数同样可以支持可变长度变量,就像下面这样声明方法:
int sum(int[] someInts) { /* */ }
这个代码片断是非常无聊的。很明显有很多更有表现力的方式来计算一个总和。例如,如果你有一个数字的列表,你可以在一行代码中计算他们的总和:
assert [1, 2, 3].sum() == 6
在Groovy中可变长度变量不需要JDK 5作为基本的Java运行时环境,在下面的章节中我们要介绍的注解则需要JDK 5。
注解
正如在JBoss Seam的文档中所介绍的那样,Seam支持使用Groovy来写Seam的实体,控制器和组件,类似@Entity,@Id,@Override以及其他的注解可以用来修饰你的bean:
@Entity
@Name("hotel")
class Hotel implements Serializable
{
@Id @GeneratedValue
Long id
@Length(max=50) @NotNull
String name
@Length(max=100) @NotNull
String address
@Length(max=40) @NotNull
String city
@Length(min=2, max=10) @NotNull
String state
@Length(min=4, max=6) @NotNull
String zip
@Length(min=2, max=40) @NotNull
String country
@Column(precision=6, scale=2)
BigDecimal price
@Override
String toString() {
return "Hotel(${name}, ${address}, ${city}, ${zip})"
}
}
来源:InfoQ中文站 作者:曹云飞 责编:豆豆技术应用