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中文站    作者:曹云飞    责编:豆豆技术应用

正在加载评论...