2014-03-06 54 views
0

我在同一個封裝中的兩個Groovy類:Groovy類非公共變量不是Java類可見

class GTest { 
    static Void main(args) { 
    println G.newInstance().var // $> available 
    } 
} 

class G { 
    String var = "available" 
} 

當我從一個Java類在同一個包類似的提法與G var沒有再看到:

public class JTest { 
    public static void main(String[] args) { 
    G g = new G(); 
    System.out.println(g.var); // $> The field G.var is not visible 
    } 
} 

當我做var Groovy類明確公開,JTEST可以訪問它。屬性範圍根據調用者的類型而不同?

回答

3

Groovy爲類屬性生成getter和setter。當離開字段定義的修飾符時,它實際上將該屬性創建爲私有字段並生成訪問器和增量器方法。當使用Groovy時,調用'g.var'實際上調用訪問器(即'g.getVar()');它只是允許你使用屬性訪問風格。

如果您的Java類調用'g.getVar()',它將能夠訪問數據。

請參閱Groovy Beans以獲取更長的解釋。

+0

Groovy現在是Apache項目,支持/澄清上述答案的適用文檔已移至[here](http://docs.groovy-lang.org/next/html/documentation/#properties) – jashworth