Comment définir une méthode d'extension statique dans Kotlin? Est-ce seulement possible? J'ai actuellement une méthode d'extension comme indiqué ci-dessous.
public fun Uber.doMagic(context: Context) {
// ...
}
L'extension ci-dessus peut être appelée sur une instance.
uberInstance.doMagic(context) // Instance method
mais comment puis-je en faire une méthode statique comme indiqué ci-dessous.
Uber.doMagic(context) // Static or class method
static-methods
kotlin
Ragunath Jawahar
la source
la source
Réponses:
Pour ce faire
Uber.doMagic(context)
, vous pouvez écrire une extension à l' objet compagnon deUber
(la déclaration d'objet compagnon est requise):la source
Voici ce que dit la documentation officielle:
Méthodes statiques Kotlin
la source
En fait, j'avais cette question exacte il y a 30 minutes, alors j'ai commencé à fouiller et je n'ai pas trouvé de solution ou de contournement pour cela, MAIS en cherchant, j'ai trouvé cette section sur le site Web de Kotlinglang qui indique que:
Alors j'ai eu l'idée la plus folle de tous les temps, pourquoi ne pas définir une fonction d'extension avec un récepteur nullable (sans utiliser réellement ce récepteur) et l'appeler ensuite sur un objet nul! Alors j'ai essayé ça, et ça a plutôt bien marché, mais ça avait l'air si moche. C'était comme ça:
J'ai donc contourné cela en créant un val dans mon fichier d'extensions du type de récepteur qui avait une valeur de null, puis je l'ai utilisé dans mon autre classe. Donc, à titre d'exemple, voici comment j'ai implémenté une fonction d'extension "statique" pour la
Navigation
classe sous Android: Dans mon fichier NavigationExtensions.kt:Dans le code qui l'utilise:
Evidemment, ce n'est pas un nom de classe, c'est juste une variable du type de classe qui a une valeur nulle. C'est évidemment moche du côté des fabricants d'extensions (car ils doivent créer la variable) et du côté des développeurs (car ils doivent utiliser le
SType
format au lieu du nom de classe réel), mais c'est le plus proche qui peut être atteint maintenant par rapport aux fonctions statiques réelles. Espérons que les créateurs de langage Kotlin répondront au problème qui a été créé et ajouteront cette fonctionnalité dans la langue.la source
Vous pouvez créer une méthode statique en utilisant un objet Companion comme:
et ensuite vous pouvez l'appeler comme:
la source
platformStatic
annotation.platformStatic
a été renomméJvmStatic
dans Kotlin actuel.Je vous recommande de regarder ce lien. Comme vous pouvez le voir, vous devez simplement déclarer la méthode au niveau supérieur du package (fichier):
C'est égal à
Avec constans, tout est pareil. Cette déclaration
est égal à
la source
J'aime aussi beaucoup avoir la possibilité d'ajouter des méthodes d'extension statiques dans Kotlin. Comme solution de contournement pour l'instant, j'ajoute la méthode d'extension à plusieurs classes au lieu d'utiliser une seule méthode d'extension statique dans chacune d'elles.
la source
Activity.isDeviceOnline(...)
sans avoir d'instance deActivity
.Pour créer une méthode d'extension dans kotlin, vous devez créer un fichier kotlin (pas une classe) puis déclarer votre méthode dans le fichier Ex:
Importez la fonction dans la classe ou le fichier sur lequel vous travaillez et utilisez-la.
la source