gpt4 book ai didi

android - 为什么建议将扩展 Room Database 的类抽象化?

转载 作者:行者123 更新时间:2023-11-29 18:29:48 24 4
gpt4 key购买 nike

背后的原因是什么?是为了表现还是强制?请解释

最佳答案

首先,我们需要了解关于抽象类的一件事,它们允许您跳过实现父类的一些默认方法

与实现所有接口(interface)方法的 Interfaces 不同,在抽象类世界中,子类可以选择实现特定于子类的内容,并在不需要时省略其他实现。

如果深入研究父 RoomDatabase 文档,您会注意到它是所有 Room 数据库的基类,并且它有一些与子类无关的方法,例如createOpenHelper()createInvalidationTracker()clearAllTables()

事实上,文档明确提到“RoomDatabase 提供对底层数据库实现的直接访问,但您应该更喜欢使用 Dao 类”

简单来说,您应该将您的 RoomDatabase 类标记为Abstract 以使您的类变得灵活并跳过实现 RoomDatabase 的不必要的方法基类。

这是真的,因为当你不将类标记为 Abstract 时,你会得到一个错误,Android Studio 会提示你实现上面的 Base Class 方法。

所以在 Kotlin 中你会做这样的事情:

@Database(entities = [Note::class], version = 1)
abstract class NoteDatabase :RoomDatabase() {

//Property must be initialized or be abstrac
abstract val noteDAO:NoteDAO

}

这里 NoteDatabase 继承自 RoomDatabase 使其成为 RoomDatabase 对象 - 它不需要父级的默认实现因此它跳过那些因为它被标记为 Abstract。

NoteDatabase 只需要声明一个抽象的noteDao 变量。这是为了让 NoteDatabase 知道 DAO 接口(interface),并且这个变量也用于测试。

关于android - 为什么建议将扩展 Room Database 的类抽象化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56849956/

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