2012-11-05 52 views

回答

3

屬性通常可以像字段一樣對待,但它們實際上是由隱式getter/setters支持的,所以您仍然可以像字段一樣引用它們或將它們設置爲等於值。在幕後,他們正在使用getter/setter(你可以重新定義你是否喜歡)。

這個頁面有(部分見尤其是「物權和現場規則」)在性能/字段和訪問修飾符細節:http://groovy.codehaus.org/Groovy+Beans

這也表明,你可以通過私人干將支持的私有財產(private字段/ setter),但是你必須明確定義getter/setter。

+0

此問題的編輯隊列已滿,但解釋屬性與字段的更新(更新)鏈接位於此處:http://groovy-lang.org/objectorientation.html#_fields_and_properties –

12

當一個Groovy類定義聲明一個沒有訪問修飾符的字段時,將生成一個公共setter/getter方法對和一個私有實例變量字段,根據JavaBeans specification,該字段也被稱爲「屬性」。

class A { 
    String property 

    /* 
     private String property 

     public void setProperty(String property) { ... } 
     public String getProperty() { ... } 
    */ 
} 

如果我們聲明一個公共實例變量字段,我們只是得到一個公共字段,沒有setter/getter方法對。

class A { 
    public String field 

    /* 
     public String field 
    */ 
} 

從Groovy的客戶POV,有在運行時訪問Groovy的屬性和公共領域之間沒有區別

def a = new A() 
println a.field 
println a.property 

雖然a.field直接訪問實例變量和a.property實際調用a.getProperty()(或a.setProperty(...)當分配一個值時)。但是,由於該屬性符合JavaBeans規範,該類可以無縫地用於基於Java的環境。

我在製作「私人財產」時看不到多少意義。 private將方法或實例/類變量用於託管類類型。但也許你是指製作一個私人字段實例變量。