And*_*ess 16
当Groovy类定义声明没有访问修饰符的字段时,将生成公共setter/getter方法对和私有实例变量字段,根据JavaBeans规范,该字段也称为"属性" .
class A {
String property
/*
private String property
public void setProperty(String property) { ... }
public String getProperty() { ... }
*/
}
Run Code Online (Sandbox Code Playgroud)
如果我们声明一个公共实例变量字段,我们只需要一个公共字段,而不需要setter/getter方法对.
class A {
public String field
/*
public String field
*/
}
Run Code Online (Sandbox Code Playgroud)
从Groovy客户端的pov,在运行时访问Groovy属性和公共字段之间没有区别
def a = new A()
println a.field
println a.property
Run Code Online (Sandbox Code Playgroud)
虽然a.field直接访问实例变量并a.property实际调用a.getProperty()(或a.setProperty(...)在分配值时).但是,由于该属性符合JavaBeans规范,因此该类可以无缝地用于基于Java的环境中.
我认为制作"私有财产"没有多大意义.private将方法或实例/类变量的使用限制为托管类类型.但也许你指的是创建一个私有字段实例变量.
属性通常可以被视为字段,但它们实际上由隐式 getter/setter 支持,因此您仍然可以像字段一样引用它们或将它们设置为等于值。在幕后,他们使用 getter/setter(如果您愿意,可以重新定义)。
此页面包含有关属性/字段和访问修饰符的详细信息(尤其参见“属性和字段规则”部分):https : //groovy-lang.org/objectorientation.html#_fields_and_properties
它还表明您可以创建私有属性(由私有 getter/setter 支持的私有字段),但您必须明确定义 getter/setter。