第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在 Kotlin 轉(zhuǎn)換期間刪除了 Setter/Getter

在 Kotlin 轉(zhuǎn)換期間刪除了 Setter/Getter

阿波羅的戰(zhàn)車 2023-02-23 14:39:13
將基于 Java 的模型類轉(zhuǎn)換為 Kotlin 后,我注意到我的 setter 和 getter 方法被刪除了。曾經(jīng)是什么private String apiKey;public void setApiKey(String key) {   this.key = key;}public String getApiKey() {   return key;}成為lateinit var apiKey: String到底發(fā)生了什么事?它是否刪除了我的 setter 和 getter,然后將我的變量的訪問修飾符從私有更改為公共?如果是這樣,為什么以及如何做到這一點(diǎn)?Setter 和 getter 是 Java 抽象的一部分。Kotlin 不關(guān)心這個(gè)?我仍在學(xué)習(xí) Kotlin,我依賴內(nèi)置的轉(zhuǎn)換作為最佳實(shí)踐的初學(xué)者指南。這只是您不在 Kotlin 中執(zhí)行 setter/getter 的情況嗎?
查看完整描述

3 回答

?
慕娘9325324

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è)面上找到。


查看完整回答
反對(duì) 回復(fù) 2023-02-23
?
慕姐4208626

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)用)。


查看完整回答
反對(duì) 回復(fù) 2023-02-23
?
絕地?zé)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方法


查看完整回答
反對(duì) 回復(fù) 2023-02-23
  • 3 回答
  • 0 關(guān)注
  • 119 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)