android - Kotlin:使用不同的子类多次实现泛型接口(基类是约束)
问题描述
错误消息:“SchedulableInserter”的类型参数 E 的值不一致:事件、分配
所以基本上我有一个抽象类Schedulable。另外我有两个类事件(单一发生的事件,如时间戳)和一个类分配(基本上是一个事件,但也有持续时间)我有一个 MainActivity,我想将实例插入 SQLiteDB。我想为 Schedulable 的每个子类使用不同的插入方法,以轻松处理它们之间的差异。
//SchedulableInserter.kt
interface SchedulableInserter<E> where E : Schedulable{
fun onInsertSchedulable(item:E)
}
//MainActivity.kt
class MainActivity() : AppCompatActivity(),
NavigationView.OnNavigationItemSelectedListener,
SchedulableInserter<Incident>, SchedulableInserter<Assignment> {
/* ^ ^
| |
Sadly Kotlin says:
Type parameter E of 'SchedulableInserter' has inconsistent values:
Incident, Assignment
A Supertype apperars twice
*/
}
我的意思是,如果我将 SchedulerInserter 绑定到 Schedulable,我可以在方法中进行区分,但我希望不必这样做。
解决方案
我建议将插入器作为活动中的属性而不是实现的接口:
class MainActivity() : AppCompatActivity(),
NavigationView.OnNavigationItemSelectedListener {
val incidentInserter = SchedulableInserter<Incident> { ... }
val assignmentInserter = SchedulableInserter<Assignment> { ... }
}
要使该语法可用,您目前需要SchedulableInserter
在 Java 中而不是 Kotlin 中定义;否则你必须写
val incidentInserter = object : SchedulableInserter<Incident> {
override fun ...
}
推荐阅读
- django-rest-framework - 如何在 drf-aysg swagger web UI 中显示棉花糖 sheme 作为 request_body 的示例
- elasticsearch - 通过 Elasticsearch 中的索引位置获取文档
- reactjs - 鸽子地图标记问题
- angular - 即使连接到数据源,如何强制分页器长度?
- javascript - 我们可以在多个数组上使用一个 Array.filter() 方法吗?
- c# - 使用 NUnit 对 DateTime 控制器进行单元测试
- java - Spring数据jpa和具有某种关系的实体
- python - While 循环忽略循环外的变量,这会在明确定义时导致未定义的错误
- reactjs - 图标应该有 `type` 属性或 `component` 属性或 `children`?
- jquery - 当我使用 jquery 选择另一个选择框的空值时,如何重置选择框?