在Kotlin中,当枚举类实现接口时,如何解决继承的声明冲突?

我定义了一个实现Neo4j的RelationshipType的枚举类:

 enum class MyRelationshipType : RelationshipType { // ... } 

我得到以下错误:

Inherited platform declarations clash: The following declarations have the same JVM signature (name()Ljava/lang/String;): fun <get-name>(): String fun name(): String

据我所知, Enum类的name()方法和RelationshipType接口的name()方法都有相同的签名。 这在Java中并不是一个问题,那么为什么在Kotlin中是错误的,我该如何解决它呢?

它是一个 kotlin bug-KT- 14115即使你让enum类实现了包含name()函数的接口也被拒绝了。

 interface Name { fun name(): String; } enum class Color : Name; // ^--- the same error reported 

但是你可以使用一个sealed类来模拟一个enum类,例如:

 interface Name { fun name(): String; } sealed class Color(val ordinal: Int) : Name { fun ordinal()=ordinal; override fun name(): String { return this.javaClass.simpleName; } //todo: simulate other methods ... }; object RED : Color(0); object GREEN : Color(1); object BLUE : Color(2);