什么是';属性';在Groovy?

什么是';属性';在Groovy?,groovy,Groovy,groovy中的属性看起来像java中没有访问修饰符的类字段。这是真的吗?或者它们有特殊的意义。似乎没有办法使这些财产私有化 属性通常可以像字段一样处理,但它们实际上是由隐式getter/setter支持的,因此您仍然可以像字段一样引用它们或将它们设置为值。在幕后,他们使用getter/setter(如果愿意,可以重新定义) 此页面包含有关属性/字段和访问修饰符的详细信息(尤其请参见“属性和字段规则”部分): 它还表明,您可以创建私有属性(私有字段由私有getter/setter支持),但在定义

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

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

此页面包含有关属性/字段和访问修饰符的详细信息(尤其请参见“属性和字段规则”部分):


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

当Groovy类定义声明没有访问修饰符的字段时,然后生成一个公共setter/getter方法对和一个私有实例变量字段,根据

如果我们声明一个公共实例变量字段,我们只得到一个公共字段,没有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
将方法或实例/类变量的使用限制为宿主类类型。但可能您指的是创建一个私有字段实例变量。

此问题的编辑队列已满,但此处有一个更新的(更新的)链接来解释属性与字段:
def a = new A()
println a.field
println a.property