Нельзя преобразовать 1: 1 в Kotlin, поскольку Kotlin ограничивает параметры типа cycli c.
Вы можете решить эту проблему, добавив новый параметр типа, который другие языки изначально поддерживают, но не Kotlin, который является параметром типа self
(в моем примере это S
) и сделав self
параметр типа и другой параметр типа как ковариантный типы (с использованием out
):
interface Model<out S : Model<S, T>, out T : View<T, S>>
interface View<out S : View<S, T>, out T : Model<T, S>>
class RealModel : Model<RealModel, RealView>
class RealView : View<RealView, RealModel>
class Binder<T : Model<*, *>> {
companion object {
fun <ViewT : View<*, ModelT>, ModelT : Model<ViewT, *>> of(view: ViewT): Binder<ModelT> {
throw RuntimeException()
}
}
}