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

时间:2017-06-14 19:27:25

标签: enums interface 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

我了解name()类中的Enum方法和name()接口中的RelationshipType方法具有相同的签名。这在Java中不是问题,为什么在Kotlin中出现错误,我该如何解决它?

2 个答案:

答案 0 :(得分:8)

它是 bug-KT-14115,即使您让enum类实现接口,其中包含name()函数被拒绝。 / p>

interface Name {
    fun name(): String;
}


enum class Color : Name;
       //   ^--- the same error reported

但是您可以使用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);

答案 1 :(得分:0)

上面的示例正在使用具有属性name而不是函数name()的接口。

interface Name {
    val name: String;
}

enum class Color : Name;