Appeler la fonction Kotlin en Java
Je suis néophite à Kotlin. J'ai besoin d'appeler une méthode dans une classe créée dans Kotlin à partir d'une classe Java. La classe en question concerne la création de la base de données.
@Database(entities = arrayOf(Indirizzo::class, Dispositivo::class), version = 1, exportSchema = false)
abstract class WppDb : RoomDatabase() {
abstract fun DispositivoDao(): DispositivoDao
abstract fun IndirizzoDao(): IndirizzoDao
private var INSTANCE : WppDb? = null
fun getInstance(context: Context): WppDb? {
if (INSTANCE == null) {
synchronized(WppDb::class) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
WppDb::class.java, "weather.db")
.build()
}
}
return INSTANCE
}
fun destroyInstance() {
INSTANCE = null
}
}
J'ai besoin d'appeler la getInstance()
méthode à partir d'une activité Java.
Si vous voulez l'équivalent de ce que les exemples Room montrent généralement avec un champ Java statique et une méthode getter statique, vous pouvez placer ces fonctions dans l' objet compagnon de votre classe:
@Database(entities = arrayOf(Indirizzo::class, Dispositivo::class), version = 1, exportSchema = false)
abstract class WppDb : RoomDatabase() {
abstract fun DispositivoDao(): DispositivoDao
abstract fun IndirizzoDao() : IndirizzoDao
companion object {
private var INSTANCE : WppDb? = null
@JvmStatic
fun getInstance(context: Context): WppDb? {
if (INSTANCE == null) {
synchronized(WppDb::class) {
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
WppDb::class.java, "weather.db")
.build()
}
}
return INSTANCE
}
@JvmStatic
fun destroyInstance() {
INSTANCE = null
}
}
}
Vous pouvez ensuite appeler à WppDb.getInstance(context)
partir du code Kotlin ou Java. Notez les @JvmStatic
annotations qui rendent ces appels plus agréables en Java - sans elles, vous devrez les utiliser WppDb.Companion
pour obtenir l'objet compagnon, puis appeler la getInstance
fonction là-dessus (donc WppDb.Companion.getInstance(context)
tout à fait).