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