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
}
