首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当支持字段为公共字段时,自动生成getter和setter的目的是什么

当支持字段为公共字段时,自动生成getter和setter的目的是什么
EN

Stack Overflow用户
提问于 2018-09-17 00:47:15
回答 1查看 38关注 0票数 0

从Groovy documentation的属性部分

代码语言:javascript
复制
class Person {
    String name                             
    int age                                 
}

您可以使用以下命令定义属性:

缺少访问修饰符(无public、protected或private)

..。

Groovy随后将相应地生成getter/setter

因此,使用上面的代码片段,我可以这样做:

代码语言:javascript
复制
Person sveta = new Person("Sveta",22)
println(sveta.getname())
println(sveta.name)

问题:,你为什么要这样做?

声明一个没有访问修饰符的变量,并允许自动为您生成getter/setters,而我仍然可以直接访问该字段,并绕过setter,这是什么目的?

我不是,而不是,我问的是setter的用途是什么,或者我为什么要使用setter,我问的是,在某些情况下,Groovy会为你生成getter/setter,但在生产中,你什么时候想这样做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-17 01:51:55

对我来说,当您需要一个带有getter和setter的Java样式bean对象(例如,传递到一个库或框架),而不必键入和维护所有的getter和setter代码/样板时,这只是一种便利。此外,当您像在示例中那样直接访问字段时,它仍然调用getter和setter,因此Groovy中的getter和setter可以提供自定义函数或副作用(可能并不理想),即使使用直接字段访问也会调用这些函数或副作用。如下所示:

代码语言:javascript
复制
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()

输出结果如下:

代码语言:javascript
复制
Person(fred bloggs, 0)
Person(sally, 0)

但是您是对的,我认为为什么需要在Groovy文档中更清楚地解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52356303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档