Groovy中的“属性”是什么?

时间:2012-11-05 03:35:05

标签: groovy

groovy中的属性看起来像没有访问修饰符的java中的类字段。真的吗?或者他们有特殊的意义。似乎没有办法让属性私有化?

2 个答案:

答案 0 :(得分:14)

当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将方法或实例/类变量的使用限制为托管类类型。但也许你指的是创建私有字段实例变量。

答案 1 :(得分:3)

属性通常可以像字段一样处理,但它们实际上由隐式getter / setter支持,因此您仍然可以像字段一样引用它们或将它们设置为等于值。在幕后,他们正在使用getter / setter(如果你愿意,你可以重新定义)。

此页面包含有关属性/字段和访问修饰符的详细信息(请参阅“属性和字段规则”部分):http://groovy.codehaus.org/Groovy+Beans

它还表明您可以创建一个私有属性(由私有getter / setter支持的私有字段),但您必须明确定义getter / setter。