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

Lau*_*eyn 9 enums interface kotlin

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

enum class MyRelationshipType : RelationshipType {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

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

hol*_*ava 10

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

interface Name {
    fun name(): String;
}


enum class Color : Name;
       //   ^--- the same error reported
Run Code Online (Sandbox Code Playgroud)

您可以enum使用sealed类来模拟类,例如:

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);
Run Code Online (Sandbox Code Playgroud)