3 回答

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 實現,以及如何更改它們的訪問級別,可以在我上面鏈接的頁面上找到。

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()
默認設置器中的重寫設置器(通過調用)。

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方法
添加回答
舉報