gpt4 book ai didi

android - 具有继承接口(interface)的 Room DAO

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:01:02 27 4
gpt4 key购买 nike

我有一个 DAO 接口(interface),我有多个实现,我希望其中一个是 Room 实现 (Kotlin):

interface BaseDao {
fun getAll(): Single<List<SomeData>>
fun insert(data: List<SomeData>)
}

和我的房间(RxRoom)界面:

@Dao
interface RxRoomBaseDao: BaseDao {
@Query("SELECT * FROM some_data")
override fun getAll(): Single<List<SomeData>>

@Insert(onConflict = OnConflictStrategy.REPLACE)
override fun insert(data: List<SomeData>)
}

看起来 Room 编译器试图编译 BaseDao 而不是 RxRoomBaseDao 并提示 error: Dao class must be annotated with @Dao 并且对于这两种方法,错误:DAO 方法只能使用以下其中一项进行注释:Insert、Delete、Query、Update

我还尝试了 RxRoomBaseDao 的抽象类,结果相同。

这是 Room 编译器的已知错误或限制吗?如何在不使用 Room 注释污染我的 BaseDao 的情况下实现我想要的?

最佳答案

看来 OP 已经从 Room 转移了,但是 fwiw,可以使用泛型来解决这个问题:

interface BaseDao<T> {
@Insert
fun insert(vararg obj: T)
}
@Dao
abstract class DataDao : BaseDao<Data>() {
@Query("SELECT * FROM Data")
abstract fun getData(): List<Data>
}

查看此 Official Room blog post 中的“使用 DAO 的继承能力”部分

关于android - 具有继承接口(interface)的 Room DAO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47698358/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com