Я работаю над библиотекой, имеющей несколько интерфейсов, связанных друг с другом.
Основной пример - ViewModel<M: Model, W: Widget>
.Тогда у нас есть интерфейс для Model и интерфейс для Widget.
В интерфейсе виджета есть метод, который принимает объект ViewModel, а затем использует его для настройки.
abstract fun configure(viewModel: ViewModel<M: Model, W: Widget>)
Я ищу способ сделать этометод требует реализации подкласса ViewModel, а не только интерфейса.
Таким образом, для ContainerWidget потребуется этот метод: fun configure(viewModel: ContainerViewModel)
Эмулируемая мной библиотека использует Swift и делает это со своимиключевое слово связанного типа, которое говорит, что вы можете сообщить нам тип позже.
Кто-нибудь знает такой вариант для Kotlin?
Большое спасибо за помощь.
abstract class WLViewModel<DataModel : WLDataModel, WidgetType : WLWidget>(val dataModel: DataModel) {
abstract fun configure(view: WidgetType)
}
interface WLWidget {
var viewModel: WLViewModel<WLDataModel, WLWidget>
fun <M, O : WLDataModel, T : WLWidget> configure(viewModel: M) where M : WLViewModel<O, T>
}
interface WLDataModel
fun WLWidget.create(viewModel: WLViewModel<WLDataModel, WLWidget>) {
configure(viewModel)
}