Заявление о создании платформы с сопоставимым

Я получаю сообщение об ошибке Clarity Platform Clash от компилятора в результате нескольких реализаций по умолчанию интерфейсов 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(Object) в Java. Таким образом, у ребенка Котлин не знает, какой из них использовать.

Есть ли механизм, который позволит мне выбрать тот, который будет использоваться, или, еще лучше, позвольте мне переопределить 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") } } 
Intereting Posts
Почему существует разница между сборщиками coroutine для CompletableFuture и ListenableFuture? Невозможно сделать API-адрес urlfetch.Fetch в потоке, который не является ни потоком исходного запроса, ни потоком, созданным ThreadManager Измените список на карте в Kotlin, настроив этот конвертировать Как вы объявляете глобальную переменную для MediaPlayer? Ошибка компиляции в Eclipse в проекте Kotlin + Java, но проект строится с Maven Строка к растровому изображению в Котлине Могу ли я обеспечить нулевую безопасность для типов платформ из Java API? Обращение к инфиксному логическому результату kotlin Kotlin: onGlobalLayout не называется Класс не найден в котлин? Kotlin type mistmatch () -> SomeType vs SomeType Google Guava Invokedynamic требует –min-sdk-version> = 26 Обновление представления Recycler и создание Parcelables для вращения экрана (что здесь лучше всего подходит?) Использовать расширение Kotlin в классе android java Текстовое изображение потока вокруг изображения