如何在 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/