我有一个项目,使用Java和Kotlin两种语言编写,最近我遇到了下一个问题。
假设我们有一个MyMonth
枚举:
public enum MyMonth {
JAN("January"),
FEB("February");
private final String name;
MyMonth(final String name) {
this.name = name;
}
public String getName() {
return name;
}
}
然后在 Kotlin 中,当我们打印月份的名称时:
fun main() {
val month = MyMonth.JAN
println(month.name)
}
我们得到:
JAN
这是在文档https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-enum/name.html
中描述的内容,但实际上名称应该是January
。
有没有一种方法可以在Kotlin中获取Java枚举中指定的名称?
更新:我的Kotlin版本是1.3.30-release-170
更新2:IDEA甚至向我显示名称来自于Java中定义的getName()
方法:
更新3:当我们明确使用.getName()
时,它可以工作,但看起来有点奇怪
MyMonth.JAN.name
,不是吗? - D. Lawrencename
属性,如此处所示,Java getter 和 Kotlin 属性之间存在冲突。如果可能的话,我建议将 Java 字段和 getter 的名称更改为除name
和getName()
以外的其他名称。就个人而言,我认为在 Java 枚举中命名字段为name
是一个不好的想法,考虑到name()
方法的存在。如果您无法更改它,那么在 Kotlin 代码中显式调用getName()
会怎样呢? - Slaw