Groovy Beans 是 JavaBeans ,但是用了一种更为简单的语法.
如下示例:
import java.util.Date
class Customer {
// properties
Integer id
String name
Date dob
// sample code
static void main(args) {
customer = new Customer(id:1, name:"Gromit", dob:new Date())
println("Hello ${customer.name}")
}
}
结果:
Hello Gromit
注意,那些properties看起来就象是public fields. 在Groovy里你也可以把properties 放入Bean的构造方法中.在Groovy中,fields和properties已经合并故他们用起来并无不同. 因此,上面的Groovy代码和下面的Java代码是相同的:
import java.util.Date;
public class Customer {
// properties
private Integer id;
private String name;
private Date dob;
public Integer getId() {
return this.id;
}
public String getName() {
return this.name;
}
public Date getDob() {
return this.dob;
}
public void setId(Integer id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setDob(Date dob) {
this.dob = dob;
}
// sample code
public static void main(String[] args) {
Customer customer = new Customer();
customer.setId(1);
customer.setName("Gromit");
customer.setDob(new Date());
println("Hello " + customer.getName());
}
}
Property和field规则
当Groovy程序被编译成字节码,下面的规则将被遵循.
* 如果property是private的,那么就用一个Java field来表示.
* 如果声明了一个public或者protected的property(properties缺省是public的), 那么一个public或者protected的getter和setter与相应的private的Java field一同被创建出来.
* 如果你没有为public或者proteced的properties显示地声明getter与setter,他们一样会在字节码一级被自动创建.
* 如果你创建了一个public或者protected的property,那么你可以重载那些被自动创建的方法. 举一个例子,你能够创建一个只读的property或者一个带有protected setter的 public read-only property,如下:
class Foo {
// read only property
private String name
public String getName() { return name }
// read only property with protected setter
Integer amount
protected void setAmount(Integer amount) { this.amount = amount }
// dynamically typed property
cheese
}