平台声明冲突与可比

我从Comparable接口的多个默认实现(下面演示)中得到编译器的Platform Declaration Clash错误。

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) 。 因此,Kotlin在孩子身上不知道使用哪一个。

有没有一种机制,可以让我选择一个使用,或者,更好的是,让我重写compareTo(Object) ? 我试过定义compareTo(Any) ,但是这是不对的。 另一个帖子建议使用@JvmName ,但注释在这里不适用(每个编译器)。

任何帮助将不胜感激。 谢谢!

要么你必须摆脱其中一个可比较的,或者你可以使用组合。 这取决于你的使用情况。

这是组成的例子。

 data class ClassAB(val x: Int, val y: String): Comparable<ClassAB> { val classA: ClassA val classB: ClassB override fun compareTo(other: ClassAB): Int { // do compare classA.compareTo(other.classA) classB.compareTo(other.classB) throw UnsupportedOperationException("not implemented") } }