コンパイラのインターフェイスの複数のデフォルト実装(以下に示す)の結果、コンパイラからプラットフォーム宣言クラッシュエラーが発生します。私はこのエラーを取得していますなぜ私が理解プラットフォーム宣言クラッシュwith Comparable
interface ClassA: Comparable<ClassA>
{
val x: Int
get
override fun compareTo(other: ClassA): Int = this.x.compareTo(other.x)
}
interface ClassB: Comparable<ClassB>
{
val y: String
get
override fun compareTo(other: ClassB): = this.y.compareTo(other.t)
}
data class ClassAB(val x: Int, val y: String): ClassA, ClassB
{
...
}
。両方の既定の実装がcompareTo
の場合、JavaのcompareTo(Object)
にマップされます。したがって、子供では、コトリンはどちらを使うべきかを知らない。
私が使用するものを選択できるようにするメカニズムがありますか、それとももっと良いですが、compareTo(Object)
を上書きさせることができますか?私はcompareTo(Any)
を定義しようとしましたが、それは正しくありませんでした。別の投稿は@JvmName
を使用して提案されていますが、注釈は(コンパイラごとに)ここでは適用されません。
ご協力いただければ幸いです。ありがとう!
すべての '匹敵'へ '匹敵'あなたがこれを行うことができ、あなたがClassAB' 'で同じシグネチャでそれをオーバーライドします...しかし、あなたは比較チェック入力する必要がと同じクラスタイプでない場合に何をすべきかを決定する。 –