如何避免Kotlin中的过载冲突?

假设我有这些接口

interface BaseDatabase

interface UpdatingDB {
    fun getSessionStat(): UpdaterSessionStat
}

interface InsertingDB {
    fun getSessionStat(): InserterSessionStat
}

而我想要一个类来实现所有这些功能。

class MyDB: BaseDatabase, UpdatingDB, InsertingDB {
    override fun getSessionStat(): UpdaterSessionStat {
        TODO("Not yet implemented")
    }

    override fun getSessionStat(): InserterSessionStat {
        TODO("Not yet implemented")
    }
}

但是它导致了重载错误。有什么可能的解决方法可以让一个类实现所有这些接口?除了修改接口本身。

解决方案:

你不能在一个类中拥有两个同名同参数的方法。作为一个变通办法,你可以使用一个带有接口类型参数的构造函数。

class MyDB(val updatingDB: UpdatingDB, val insertingDB: InsertingDB): BaseDatabase {
    fun getSessionStat1(): UpdaterSessionStat {
        return updatingDB.getSessionStat()
    }
    fun getSessionStat2(): InserterSessionStat {
        return insertingDB.getSessionStat()
    }
}

在不同的类中实现这些接口

class UpdatingDBImpl : UpdatingDB {
    override fun getSessionStat(): UpdaterSessionStat {
        // ...
    }
}

class InsertingDBImpl : InsertingDB {
    override fun getSessionStat(): InserterSessionStat {
        // ...
    }
}

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何在 draw(_:)中给 UIBezierPath 做动画?

2022-9-20 8:59:20

未分类

ggplot2 geom_posterior plot排序方法

2022-9-20 8:59:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索