Kotlin 語言規范聲稱識別符號區分大小寫,但由于生成的 getter/setter 顯然不區分大小寫,因此以下會產生編譯器錯誤訊息。
var a=10; var A=20
Clash.kt:1:1: error: platform declaration clash: The following declarations have the same JVM signature (getA()I):
fun <get-A>(): Int defined in root package
fun <get-a>(): Int defined in root package
var a=10
^
我明白發生了什么,但這似乎是正確的行為嗎?有沒有解決的辦法?
uj5u.com熱心網友回復:
這與編譯器如何創建 getter 和 setter 以匹配 Java Beans 標準有關。在這種情況下,getter 和 setter 都被命名getA(),setA(...)因為它嘗試使用該欄位的初始 caps 版本。但是,如果這些欄位被命名為aaand AA,則您將有getAa()andgetAA()和 不會有名稱沖突。
uj5u.com熱心網友回復:
另一種解決方法是@JvmField在一個或兩個屬性上使用。這可以防止生成 Java getter 和 setter 方法,因此無需擔心方法簽名沖突。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324543.html
