gpt4 book ai didi

java - 如何在 Kotlin 中实例化一个抽象类?

转载 作者:太空狗 更新时间:2023-10-29 15:50:22 25 4
gpt4 key购买 nike

我遇到了以下问题:

我的 MainActivity 代码:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// ...
// ERROR: Cannot create instance of an abstract class
var db = DataBase().getDataBase(this)
// ...
}
}

房间的数据库:

@Database(entities = arrayOf(DataBaseUser::class), version = 1)
abstract class DataBase : RoomDatabase() {

val DB_NAME : String = "DataBaseUser"
private lateinit var INSTANCE : DataBase

fun getDataBase(context: Context): DataBase {
if (INSTANCE == null){
INSTANCE = Room.databaseBuilder(context.applicationContext,DataBase::class.java,DB_NAME).build()
}
return INSTANCE
}

abstract fun getUserDao(): DataBaseUserDao
}

我无法在 Kotlin 中实例化该类。在 Java 中我是这样做的:

db = AppDataBase.getDataBase(view.getContext());

如何在 Kotlin 中获得相同的结果?

最佳答案

使用单例(在 Kotlin object 中)来保存 Room 数据库实例:

@Database(entities = arrayOf(DataBaseUser::class), version = 1)
abstract class DataBase : RoomDatabase() {
abstract fun getUserDao(): DataBaseUserDao
}

object DatabaseProvider {
private const val DB_NAME: String = "DataBaseUser"
private lateinit var dbInstance: DataBase

fun getDatabase(context: Context): DataBase {

if (!this::dbInstance.isInitialized) {
dbInstance = Room.databaseBuilder(
context.applicationContext,
DataBase::class.java,
DB_NAME
).build()
}

return dbInstance
}
}

用法:

val db = DatabaseProvider.getDatabase(view.getContext())

关于java - 如何在 Kotlin 中实例化一个抽象类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47814153/

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