Kotlinで、列挙型クラスがインターフェイスを実装するときに、継承された宣言の衝突を回避するにはどうすればよいですか?

Laurent Pireyn

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でエラーが発生するのはなぜですか。また、どうすれば回避できますか?

holi-java

これは バグです-KT-14115enumクラスに関数を含むインターフェイス実装させても、name()拒否されます。

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

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ