亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Kotlin 轉換期間刪除了 Setter/Getter

在 Kotlin 轉換期間刪除了 Setter/Getter

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

3 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

您的 field + getter/setter 已轉換為Kotlin Properties。因為字段 + getter/setter 非常常見,Kotlin 對它有頂級支持??雌饋砟谥苯釉L問裸字段,但事實并非如此。Kotlin 對您隱藏了 getter 和 setter 的默認實現。在大多數情況下,我們只是想要一個沒有任何其他邏輯的 get 或 set,所以我們不需要看到它。任何時候你apiKey在 Kotlin 中訪問,你都在通過 getter 或 setter。

至于為什么是public,屬性在Kotlin中默認是public的。如何提供您自己的 get/set 實現,以及如何更改它們的訪問級別,可以在我上面鏈接的頁面上找到。


查看完整回答
反對 回復 2023-02-23
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

它是否刪除了我的 setter 和 getter,然后將我的變量的訪問修飾符從私有更改為公共?

是的。

如果是這樣,為什么

它為您擁有的代碼生成了慣用的 Kotlin。

這有什么好?

Idiomatic Kotlin 是 Kotlin 代碼翻譯器的合理默認選擇。

Setter 和 getter 是 Java 抽象的一部分。Kotlin 不關心這個?

當然可以。但是,您現有的 setter 和 getter 沒有做任何事情,因此 Kotlin 轉換刪除了它們,選擇使用已經存在的默認 setter 和 getter。

讓我們假設您的代碼如下所示:

private String apiKey;public void setApiKey(String key) {   this.key = key.toUpperCase();
}public String getApiKey() {   return key;
}

此處,setter 強制 API 密鑰始終為大寫。

等效的 Kotlin 將是:

var apiKey: String = "THE-DUDE-ABIDES"
  set(value) { field = value.toUpperCase() }

您的財產的消費者apiKey總是使用 getter 和 setter。只是,在語法上,Kotlin 讓調用 getter 和 setter 看起來就像訪問一個簡單的字段。因此,消費者apiKey不需要做任何不同的事情來使用toUpperCase()默認設置器中的重寫設置器(通過調用)。


查看完整回答
反對 回復 2023-02-23
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

我建議你閱讀一個很好的文檔,Kotlin例如property-getter-and-setter-kotlin但我會給你一個小例子......


setter他們移除是正常的getter,他們仍然在那里......問題是,如果你想要override這些set,get你應該做類似的事情:


private var apiKey: String

get() = "My apiKey is $apiKey"

set(value) {

    //Do whatever you want with apiKey

}

所以,如果你不想使用override這些方法,你可以簡單地使用以下方法訪問它:


如果你這樣做,apiKey = ...你正在使用一套


如果你使用var newVar = apiKey你正在使用get方法


查看完整回答
反對 回復 2023-02-23
  • 3 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號