在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);