gpt4 book ai didi

android - 我怎样才能在 Kotlin 中简化这个单例?

转载 作者:搜寻专家 更新时间:2023-11-01 08:20:42 25 4
gpt4 key购买 nike

如何在 Kotlin 中简化这个用于 Android 房间数据库初始化的单例?

@Database(entities = arrayOf(Book::class, User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {

abstract fun bookModel() : BookDao
abstract fun userModel() : UserDao

companion object {
private var INSTANCE: AppDatabase? = null

fun getInMemoryDatabase(context: Context): AppDatabase {
if (INSTANCE == null) {
INSTANCE = Room.inMemoryDatabaseBuilder(context.applicationContext, AppDatabase::class.java).build()
}
return INSTANCE!!
}

fun destroyInstance() {
INSTANCE = null
}
}
}

最佳答案

您可以使用数组文字 ([]) 代替 arrayOf,并且可以使用 elvis 运算符进行空值检查。参见 here .

@Database(entities = [Book::class, User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {

abstract fun bookModel() : BookDao
abstract fun userModel() : UserDao

companion object {
private var INSTANCE: AppDatabase? = null

fun getInMemoryDatabase(context: Context): AppDatabase {
INSTANCE = INSTANCE ?: Room.inMemoryDatabaseBuilder(context.applicationContext, AppDatabase::class.java).build()
return INSTANCE!!
}

fun destroyInstance() {
INSTANCE = null
}
}
}

因为您需要实例,所以您必须将它保存在某个地方,使用伴随对象对我来说似乎是一个合理的解决方案。

如果您不想将实例保存在 AppDatabase 中,您也可以使用一个对象(在 Kotlin 中是一个单例)。

object AppDatabaseProvider {
private var INSTANCE: AppDatabase? = null

fun getInMemoryDatabase(context: Context): AppDatabase {
// ...
}

fun destroyInstance() {
INSTANCE = null
}
}

这些都是在 Kotlin 中处理静态数据的选项,但你不会得到比这短得多的选项。

关于android - 我怎样才能在 Kotlin 中简化这个单例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51600575/

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