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

马蒂亚斯·霍夫马赫(Matthias Hofmarcher)

错误消息:“ SchedulableInserter”的类型参数E的值不一致:“事件”,“分配”

所以基本上我有一个抽象类Schedulable。另外,我有两个类Incident(发生一次事件,如时间戳)和一个Assignment类(基本上是一个事件,但也具有持续时间),我有一个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,我可以在方法中进行区分,但是我不必这样做。

阿列克谢·罗曼诺夫(Alexey Romanov)

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

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

为了使该语法可用,您当前需要使用SchedulableInserterJava而不是Kotlin进行定义否则你必须写

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

通用接口出现错误:接口Observer不能多次使用不同的参数实现:

检查“ this”是否实现了接口,然后从通用基类内部为子类调用其成员?

实现通用接口的类的子类

如何多次实现相同的接口,但使用不同的泛型?

接口xxx不能使用不同的参数多次实现:

为什么不可能用不同的类型参数多次实现通用接口?

使用不带instanceof的超类集合中的子类实现的接口

为什么不能使用不同的参数多次实现参数化的接口?

Java泛型如何避免接口使用不同的参数不能多次实现

对Generic类的子类使用不同的TypeVar

如何让 Simple Injector 为同一个接口使用不同的具体类,但使用不同的类

基类和接口的 C# 通用约束

使用ninject注册实现通用接口的类

多次实现相同的通用接口,该通用接口包含具有不同类型参数的属性

如何动态子类化(或实现)基类(或接口)?

在Autofac中为一个接口使用不同的实现

使用Guice注入通用接口子类型的实现

通用扩展类并在Kotlin中实现接口

Java:阻止子类提供与基类不同的接口

使用asm如何声明非通用类实现通用接口

使用打开的通用接口注册关闭的通用类实现

为通用类实现IComparable <T>接口以比较类型T

基类实现接口

明确标记派生类为基类的实现接口

Java抽象类包含一个map变量,子类使用不同的实现来初始化map

我们如何使用不同接口的默认实现?

通用扩展类并实现接口

扩展通用类并实现接口

实现通用接口的类的字典