首页 > 解决方案 > 如何避免 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")
    }
}

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

标签: javakotlinoopdesign-patternsoverloading

解决方案


一个类中不能有两个具有相同名称和相同参数的方法。作为一种解决方法,您可以使用带有接口类型参数的构造函数:

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 {
        // ...
    }
}

推荐阅读