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(...)
因为它尝试使用该字段的初始大写版本。但是,如果这些字段被命名为 aa
和 AA
,那么您将拥有 getAa()
和 getAA()
,并且不会发生名称冲突。
另一种解决方法是对一个或两个属性使用 @JvmField
。这可以防止生成 Java getter 和 setter 方法,因此无需担心方法签名冲突。
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(...)
因为它尝试使用该字段的初始大写版本。但是,如果这些字段被命名为 aa
和 AA
,那么您将拥有 getAa()
和 getAA()
,并且不会发生名称冲突。
另一种解决方法是对一个或两个属性使用 @JvmField
。这可以防止生成 Java getter 和 setter 方法,因此无需担心方法签名冲突。