代码之家  ›  专栏  ›  技术社区  ›  s-hunter

我怎样才能让科特林的这首单曲更简单呢?

  •  2
  • s-hunter  · 技术社区  · 8 年前

    对于Android Room数据库初始化,我如何使Kotlin中的singleton更简单?

    @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
            }
        }
    }
    
    3 回复  |  直到 8 年前
        1
  •  2
  •   Willi Mentzel user670265    8 年前

    [] arrayOf 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) { 
                INSTANCE = INSTANCE ?: Room.inMemoryDatabaseBuilder(context.applicationContext, AppDatabase::class.java).build()
                return INSTANCE!!
            }
    
            fun destroyInstance() {
                INSTANCE = null
            }
        }
    }
    

    companion object

    AppDatabase

    object AppDatabaseProvider {
        private var INSTANCE: AppDatabase? = null
    
        fun getInMemoryDatabase(context: Context) {
           // ...
        }
    
        fun destroyInstance() {
            INSTANCE = null
        }
    }
    

        2
  •  1
  •   zsmb13    8 年前

    private var INSTANCE: AppDatabase? = null
    
    fun getInMemoryDatabase(context: Context) = INSTANCE ?: Room.inMemoryDatabaseBuilder(context.applicationContext, AppDatabase::class.java).build()
    

    getInMemoryDatabase INSTANCE null


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

        3
  •  0
  •   Abner Escócio    8 年前

    @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 {
                return INSTANCE :? Room.inMemoryDatabaseBuilder(context, this).build()
            }
    
            fun destroyInstance() {
                INSTANCE = null
            }
        }
    }