美文网首页
Kotlin双空校验式单例

Kotlin双空校验式单例

作者: 一个大西瓜CPI | 来源:发表于2018-07-21 10:37 被阅读5次

    以数据库创建为例
    在Java中

    @Database(entities = {User.class}, version = 1)
    public abstract class UsersDatabase extends RoomDatabase {
    
        private static volatile UsersDatabase INSTANCE;
    
        public abstract UserDao userDao();
    
        public static UsersDatabase getInstance(Context context) {
            if (INSTANCE == null) {
                synchronized (UsersDatabase.class) {
                    if (INSTANCE == null) {
                        INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                                UsersDatabase.class, "Sample.db")
                                .build();
                    }
                }
            }
            return INSTANCE;
        }
    
    }
    

    在Kotlin中

    @Database(entities = arrayOf(User::class), version = 1)
    abstract class UsersDatabase : RoomDatabase() {
    
        abstract fun userDao(): UserDao
    
        companion object {
    
            @Volatile private var INSTANCE: UsersDatabase? = null
    
            fun getInstance(context: Context): UsersDatabase =
                    INSTANCE ?: synchronized(this) {
                        INSTANCE ?: buildDatabase(context).also { INSTANCE = it }
                    }
    
            private fun buildDatabase(context: Context) =
                    Room.databaseBuilder(context.applicationContext,
                            UsersDatabase::class.java, "Sample.db")
                            .build()
        }
    }
    

    相关文章

      网友评论

          本文标题:Kotlin双空校验式单例

          本文链接:https://www.haomeiwen.com/subject/rathmftx.html