Вызов функции Котлина в Java - PullRequest
0 голосов
/ 03 июля 2018

Я неофит в Котлине. Мне нужно вызвать метод в классе, созданном в Kotlin из класса Java. Рассматриваемый класс касается создания базы данных.

@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
    }
}

Мне нужно вызвать метод getInstance() из Java Activity.

1 Ответ

0 голосов
/ 03 июля 2018

Если вы хотите получить эквивалент того, что обычно показывают образцы Room со статическим полем Java и статическим методом получения для него, вы можете поместить эти функции в объект-компаньон вашего класса:

@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
        }
    }
}

Затем вы можете вызвать WppDb.getInstance(context) из кода Kotlin или Java. Обратите внимание на аннотации @JvmStatic, которые делают эти вызовы приятнее в Java - без них вам придется использовать WppDb.INSTANCE, чтобы получить объект-компаньон, а затем вызвать функцию getInstance для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...