平台声明与 Comparable 冲突
Platform Declaration Clash with Comparable
由于 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)
。因此,在 child 中,Kotlin 不知道使用哪一个。
是否有一种机制可以让我 select 使用,或者更好的是,让我覆盖 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")
}
}
由于 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)
。因此,在 child 中,Kotlin 不知道使用哪一个。
是否有一种机制可以让我 select 使用,或者更好的是,让我覆盖 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")
}
}