How would you create a singleton with parameter in Kotlin?

Technology CommunityCategory: KotlinHow would you create a singleton with parameter in Kotlin?
VietMX Staff asked 3 years ago

Because a Kotlin object can’t have any constructor, you can’t pass any argument to it.

So look at this code from Google’s architecture components sample code, which uses the also function:

class UsersDatabase : RoomDatabase() {

    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()
    }
}