在 Java 中调用 Kotlin 函数
Call Kotlin function in Java
我是 Kotlin 的新手。我需要从 Java class 调用在 Kotlin 中创建的 class 中的方法。
有问题的 class 涉及数据库的创建。
@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
}
}
我需要从 Java Activity 调用 getInstance()
方法。
如果您想要与 Room 示例通常显示的具有静态 Java 字段和静态 getter 方法的等效项,您可以将这些函数放在您的 companion object class:
@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
}
}
}
然后您可以从 Kotlin 或 Java 代码调用 WppDb.getInstance(context)
。请注意 @JvmStatic
注释使这些调用在 Java 中更好——没有它们,您必须使用 WppDb.Companion
来获取伴随对象,然后调用 getInstance
函数就此(所以 WppDb.Companion.getInstance(context)
一共)。
我是 Kotlin 的新手。我需要从 Java class 调用在 Kotlin 中创建的 class 中的方法。 有问题的 class 涉及数据库的创建。
@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
}
}
我需要从 Java Activity 调用 getInstance()
方法。
如果您想要与 Room 示例通常显示的具有静态 Java 字段和静态 getter 方法的等效项,您可以将这些函数放在您的 companion object class:
@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
}
}
}
然后您可以从 Kotlin 或 Java 代码调用 WppDb.getInstance(context)
。请注意 @JvmStatic
注释使这些调用在 Java 中更好——没有它们,您必须使用 WppDb.Companion
来获取伴随对象,然后调用 getInstance
函数就此(所以 WppDb.Companion.getInstance(context)
一共)。