java - 在 Kotlin 中使用泛型强制更具体的子类类型
问题描述
我正在开发一个具有一些相互关联的接口的库。
主要例子是ViewModel<M: Model, W: Widget>
. 然后我们有一个模型接口和一个小部件接口。
小部件接口有一个方法,它接受一个 ViewModel 对象,然后使用它来配置自己。
abstract fun configure(viewModel: ViewModel<M: Model, W: Widget>)
我正在寻找一种方法使该方法需要 ViewModel 的子类实现,而不仅仅是接口。
所以一个 ContainerWidget 需要这个方法:fun configure(viewModel: ContainerViewModel)
我正在模拟的库使用 Swift 并使用其关联的 type 关键字来执行此操作,这表示您可以稍后告诉我们类型。
有谁知道 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)
}
解决方案
推荐阅读
- vuejs2 - VueJs VueX vue-i18n 翻译的实现
- c - 对 char 和 char * 感到困惑并用单词扫描
- python - QSqlQuery中isValid()的解释
- spring-boot - Springboot 微服务响应慢
- javascript - 写入子子进程
- javascript - 在 asp.net 中从 javascript 访问模型数据
- python - 关于 numpy.random.binomial() 的第三个参数的困惑
- kotlin - 具有可为空变量的 Kotlin 智能转换
- rest - TRESTResponse 向 Web 服务方法发送不同的参数值
- node.js - 在更新查询中重用查询中的 _id