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

标签 java android kotlin abstract-class

我遇到了以下问题:

我的 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/

相关文章:

java - 如何避免 Java 中的 Java 堆空间异常

java - Spring boot 不明确的处理程序

android - java.util.zip.ZipException : duplicate entry: com/facebook/ads/AbstractAdListener. 类

java - Android 相机捕获请求和多个目标表面的问题

java - 搜索翻译的id时应该返回null还是-1?

bash - 使 Gradle 任务可以访问环境变量

java - 使用 Hibernate Provider 的 WebSphere 7 Entity Manager 创建问题?

java - 使用 JdbcTemplate 在 Spring Boot 中耗尽连接池

android - 错误 : unknown tag <:string> in my app

带条件的 Kotlin 复制函数