Kotlin Singleton

Without constructor


object MyKotlinSingleton {
    var myKotlinProperty: String = "Kotlin Singleton!"

    fun myKotlinFunction() {
        println("Function in singleton")
    }
}

fun main() {
    println(MyKotlinSingleton.myKotlinProperty)
    MyKotlinSingleton.myKotlinFunction()
    MyKotlinSingleton.myKotlinProperty = "Hello, androidstudio.io";
    println(MyKotlinSingleton.myKotlinProperty)
}

With constructor


import androidx.room.Room
import android.content.Context

object MyDatabaseSingleton {

    private lateinit var database: MyDatabase

    fun initialize(context: Context) { // constructor
        database = Room.databaseBuilder(
            context.applicationContext,
            MyDatabase::class.java,
            "my_db"
        ).build()
    }

    fun getDatabase(): MyDatabase {
        return database
    }
}

class MyDatabase {
   
}

fun main() {
    MyDatabaseSingleton.initialize(context)
    val myDatabase = MyDatabaseSingleton.getDatabase()
}

Hilt @Singleton


import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
internal object DatabaseModule {
    @Provides
    @Singleton
    fun providesMyDatabase(
        @ApplicationContext context: Context,
    ): MyDatabase = Room.databaseBuilder(
        context,
        MyDatabase::class.java,
        "my_db",
    ).build()
}