Kotlin 变量名:区分大小写?

Kotlin variable names: case sensitive?

Kotlin 语言规范声称标识符区分大小写,但由于生成的显然不区分大小写,以下内容会产生编译器错误消息 getters/setters。

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
^

我明白发生了什么,但这看起来是正确的行为吗?有解决办法吗?

这与编译器如何创建 getter 和 setter 以匹配 Java Beans 标准有关。在这种情况下,getter 和 setter 都被命名为 getA()setA(...) 因为它尝试使用该字段的初始大写版本。但是,如果这些字段被命名为 aaAA,那么您将拥有 getAa()getAA(),并且不会发生名称冲突。

另一种解决方法是对一个或两个属性使用 @JvmField。这可以防止生成 Java getter 和 setter 方法,因此无需担心方法签名冲突。