从Groovy documentation的属性部分:
class Person {
String name
int age
}
您可以使用以下方法定义属性:
缺少访问修饰符(无公共,受保护或私有)
...
然后,Groovy将适当地生成吸气剂/吸气剂
因此,使用上面的代码段,我可以做到这一点:
Person sveta = new Person("Sveta",22)
println(sveta.getname())
println(sveta.name)
问题:您为什么要这样做?
声明一个没有访问修饰符的变量的目的是什么,而当我仍然可以直接访问该字段并绕开设置程序时,允许自动为您生成getter/setters
的目的是什么?
我不问一个setter的目的是什么,或者为什么我要使用一个setter,我要问的是,Groovy在一定条件下为您生成了getter/setter
情况下,但是在生产中您什么时候想要这样做?
答案 0 :(得分:1)
对我来说,这是一种方便,当您需要具有带有getter和setter的Java样式Bean对象(例如,传递到库或框架),而不必键入和维护所有getter和setter代码时/样板。同样,当您像示例中一样直接访问字段时,它仍在调用getter和setter,因此即使在使用直接字段访问时,Groovy中的getter和setter也可以提供被调用的自定义函数或副作用(可能不理想) 。像这样:
import groovy.transform.ToString
@ToString
class Person {
String name
int age
String getName() {
if(name == 'fred') {
return 'fred bloggs'
}
else {
return name
}
}
}
def p = new Person()
p.name = 'fred'
assert p.name == 'fred bloggs'
assert p.getName() == 'fred bloggs'
println p.toString()
p.name = 'sally'
assert p.name == 'sally'
assert p.getName() == 'sally'
println p.toString()
输出结果:
Person(fred bloggs, 0)
Person(sally, 0)
但是您是对的,我认为需要在Groovy文档中更清楚地解释其原因。