Appeler la fonction Kotlin en Java


Anto:

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.

zsmb13:

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 @JvmStaticannotations qui rendent ces appels plus agréables en Java - sans elles, vous devrez les utiliser WppDb.Companionpour obtenir l'objet compagnon, puis appeler la getInstancefonction là-dessus (donc WppDb.Companion.getInstance(context)tout à fait).

Articles connexes


Comment appeler Kotlin suspendre la fonction coroutine de Java 7

michalbrz: Je suis en train d'appeler la fonction Kotlin de Java 7. J'utilise coroutines et cette fonction appelée est la suspension, par exemple: suspend fun suspendingFunction(): Boolean { return async { longRunningFunction() }.await() } suspend fun lon

Impossible d'appeler la fonction en Java

chantier naval: Lorsque j'essaie d'appeler la fonction de paroles dans ce code, une "déclaration de méthode non valide; type de retour requis" se produit. J'apprends Java et très très nouveau pour lui. Je ne sais pas comment définir la fonction et appeler la f

Appeler la fonction périodiquement en Java

Des centaines de Bahmaniens: nous devons exécuter une fonction périodiquement dans l'application Web Java. Comment appeler périodiquement la fonction d'une classe? Existe-t-il un moyen d'appeler la fonction lorsqu'un événement se produit, comme une charge élev

Appeler la fonction en ligne Kotlin à partir de Java

aristotll Exceptions.kt: @Suppress("NOTHING_TO_INLINE") inline fun generateStyleNotCorrectException(key: String, value: String) = AOPException(key + " = " + value) À kotlin: fun inKotlin(key: String, value: String) { throw generateStyleNotCorrectE

Impossible d'appeler la fonction d'extension kotlin depuis java

Rahul Je sais que les fonctions d'extention kotlin sont compilées en tant que fonction statique en utilisant fileName comme nom de classe avec le suffixe Kt. Le problème est que ma fonction de paramètre String unique demande deux paramètres String lorsqu'elle

Comment appeler la clé de classe Kotlin en Java?

Ours de vacances Nous créons le module Dagger pour fournir la classe comme suit, mais nous rencontrons le problème. CustomHelperest classe * de .kt, si nous utilisons CustomHelper::classdans @ClassKey, il ne sera pas reconnu en Java et obtenir erreur de syntax

Appeler la complétion de kotlin en java

Sean Calkins J'ai une méthode de requête Web kotlin qui prend une fonction comme paramètre. En raison de la configuration d'une de mes classes, je dois la conserver en tant que classe java, mais je dois appeler la méthode de requête Web à partir de la classe j

Comment appeler une fonction kotlin de haut niveau en java?

Chriss Supposons qu'une fonction kotlin est définie en dehors d'une classe en tant que fonction de niveau supérieur. Util.kt: class Util { fun bar() } fun foo(){} Comment puis-je appeler une méthode foo()en Java? Aasmund Eldhuset foosera compilé en une fon

Comment appeler la fonction Python en Java

MedDiv Voici mon code Python: class myPythonClass: def table(nb): i = 0 while i < 10: print(i + 1, "*", nb, "=", (i + 1) * nb) i += 1 J'ai besoin de savoir comment l'appeler en utilisant PythonInterpreter. mhawke