[英]What is the purpose of automatically generating getters and setters when the backing field is public
从Groovy 文档的properties部分:
class Person {
String name
int age
}
您可以使用以下方法定义属性:
缺少访问修饰符(无公共,受保护或私有)
...
Groovy然后将适当地生成吸气剂/吸气剂
因此,使用上面的代码片段,我可以做到这一点:
Person sveta = new Person("Sveta",22)
println(sveta.getname())
println(sveta.name)
问题:您为什么要这样做?
声明没有访问修饰符的变量并允许我在仍然可以直接访问该字段并规避setter的情况下自动为您生成getter/setters
的目的是什么?
我不是在问设置器的目的是什么,或者为什么要使用它,我要问的是,Groovy在某些情况下会为您生成getter/setter
,但是在生产中您什么时候想要这样做?
对我来说,这是一种方便,当您需要具有带有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文档中更清楚地解释其原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.