I define an enum class that implements Neo4j's RelationshipType:
enum class MyRelationshipType : RelationshipType {
    // ...
}
I get the following error:
Inherited platform declarations clash: The following declarations have the same JVM signature (name()Ljava/lang/String;): fun <get-name>(): String fun name(): String
I understand that both the name() method from the Enum class and the name() method from the RelationshipType interface have the same signature. This is not a problem in Java though, so why is it an error in Kotlin, and how can I work around it?
Just like in Java, a kotlin enum can implement an interface. However, each instance of the enum has to implement the interface, which is why we now have a class body after each declaration of the enum.
Inheriting an enum Class from Another Class It is because all enums in Java are inherited from java. lang. Enum . And extending multiple classes (multiple inheritance) is not allowed in Java.
Since Kotlin enums are classes, they can have their own properties, methods, and implement interfaces.
it is a 
kotlin  bug-KT-14115 even if you makes the enum class implements the interface which contains a name() function is denied.
interface Name {
    fun name(): String;
}
enum class Color : Name;
       //   ^--- the same error reported
BUT you can simulate a enum class by using a sealed class, for example:
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);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With