3 回答

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的 field + getter/setter 已轉(zhuǎn)換為Kotlin Properties。因?yàn)樽侄?+ getter/setter 非常常見,Kotlin 對(duì)它有頂級(jí)支持??雌饋砟谥苯釉L問裸字段,但事實(shí)并非如此。Kotlin 對(duì)您隱藏了 getter 和 setter 的默認(rèn)實(shí)現(xiàn)。在大多數(shù)情況下,我們只是想要一個(gè)沒有任何其他邏輯的 get 或 set,所以我們不需要看到它。任何時(shí)候你apiKey
在 Kotlin 中訪問,你都在通過 getter 或 setter。
至于為什么是public,屬性在Kotlin中默認(rèn)是public的。如何提供您自己的 get/set 實(shí)現(xiàn),以及如何更改它們的訪問級(jí)別,可以在我上面鏈接的頁(yè)面上找到。

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊
它是否刪除了我的 setter 和 getter,然后將我的變量的訪問修飾符從私有更改為公共?
是的。
如果是這樣,為什么
它為您擁有的代碼生成了慣用的 Kotlin。
這有什么好?
Idiomatic Kotlin 是 Kotlin 代碼翻譯器的合理默認(rèn)選擇。
Setter 和 getter 是 Java 抽象的一部分。Kotlin 不關(guān)心這個(gè)?
當(dāng)然可以。但是,您現(xiàn)有的 setter 和 getter 沒有做任何事情,因此 Kotlin 轉(zhuǎn)換刪除了它們,選擇使用已經(jīng)存在的默認(rèn) setter 和 getter。
讓我們假設(shè)您的代碼如下所示:
private String apiKey;public void setApiKey(String key) { this.key = key.toUpperCase(); }public String getApiKey() { return key; }
此處,setter 強(qiáng)制 API 密鑰始終為大寫。
等效的 Kotlin 將是:
var apiKey: String = "THE-DUDE-ABIDES" set(value) { field = value.toUpperCase() }
您的財(cái)產(chǎn)的消費(fèi)者apiKey
總是使用 getter 和 setter。只是,在語(yǔ)法上,Kotlin 讓調(diào)用 getter 和 setter 看起來就像訪問一個(gè)簡(jiǎn)單的字段。因此,消費(fèi)者apiKey
不需要做任何不同的事情來使用toUpperCase()
默認(rèn)設(shè)置器中的重寫設(shè)置器(通過調(diào)用)。

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
我建議你閱讀一個(gè)很好的文檔,Kotlin例如property-getter-and-setter-kotlin但我會(huì)給你一個(gè)小例子......
setter他們移除是正常的getter,他們?nèi)匀辉谀抢?.....問題是,如果你想要override這些set,get你應(yīng)該做類似的事情:
private var apiKey: String
get() = "My apiKey is $apiKey"
set(value) {
//Do whatever you want with apiKey
}
所以,如果你不想使用override這些方法,你可以簡(jiǎn)單地使用以下方法訪問它:
如果你這樣做,apiKey = ...你正在使用一套
如果你使用var newVar = apiKey你正在使用get方法
添加回答
舉報(bào)