Kotlin:使用不同的子类多次实现通用接口(基类是约束)



错误消息:"可调度插入器"的类型参数 E 的值不一致:事件、分配

所以基本上我有一个可调度的抽象类。我也有两个类事件(单个发生的事件,如时间戳(和班级作业(基本上是一个事件,但也有持续时间(我有一个 MainActivity,我想在其中将实例插入到 SQLiteDB 中。我想为可调度的每个子类使用不同的插入方法以轻松处理它们之间的差异。

/

/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
*/
}

我的意思是,如果我将调度程序插入器绑定到可调度,我可以在方法中区分,但我希望不必这样做。

我的建议是将插入器作为活动中的属性,而不是实现的接口:

class MainActivity() : AppCompatActivity(),
    NavigationView.OnNavigationItemSelectedListener {
    val incidentInserter = SchedulableInserter<Incident> { ... }
    val assignmentInserter = SchedulableInserter<Assignment> { ... }
}

为了使该语法可用,您目前需要在 Java 而不是 Kotlin 中定义SchedulableInserter;否则您必须编写

    val incidentInserter = object : SchedulableInserter<Incident> { 
        override fun ...
    }

由Ben P回答。

溶液:

我的意思是如果我绑定,我可以在方法中区分 调度程序插入器到可调度,但我希望不必 这样做。

最新更新