簡體   English   中英

在公開字段中自動生成getter和setter的目的是什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM