【问题标题】:Conflicting 'name' declaration in enum枚举中冲突的“名称”声明
【发布时间】:2019-03-04 13:46:39
【问题描述】:

我有一个简单的枚举类,我希望在其中有一个名为 name 的字段。

enum class DeviceFieldQuery(val clazz: Class<*>) {
    id(Int::class.java),
    name(String::class.java),
}

不幸的是,这在 Kotlin 中似乎不起作用。编译失败并显示消息:

错误:(9, 5) Kotlin: Conflicting declarations: enum entry name, public final val name: String

与 Java 代码相同的 Enum 类可以正常工作。我如何在 Kotlin 中解决这个问题?

【问题讨论】:

    标签: enums kotlin


    【解决方案1】:

    Kotlin 中的枚举已经定义了 name 属性(如 Java)。这与您名为name 的枚举冲突。要修复它,您可以将其大写,这更惯用:

    enum class DeviceFieldQuery(val clazz: Class<*>) {
        Id(Int::class.java),
        Name(String::class.java),
    }
    

    【讨论】:

    • 谢谢,但此时我不想使用大写字母。要求字段声明为小写。
    • 你不能称它为name,因为它已经与枚举上的一个属性冲突了,你必须把它改成别的东西,不管是大写还是拼写不同。
    • 正如我已经提到的,我必须将其命名为name。如果那不可能,那么我现在应该认为这是语言的限制。 :(
    • 这就是我要告诉你的,是的。将枚举大写也更惯用。祝你的项目好运。
    • 惯用的,如果不被编译器强制执行,只是另一个可以并且将会被打破的规则。无论如何,这个条目有很多 java 枚举。对于 kotlin 来说,将这样一个常见的称为某种特殊的东西有点不幸。我今天遇到两个试图迁移一些代码。出于好奇,为什么在枚举下命名一个单独的条目而不是值的属性,就像在 Java 端一样?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多