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:
Notez que les extensions peuvent être définies avec un type de récepteur Nullable. De telles extensions peuvent être appelées sur une variable objet même si sa valeur est nulle.
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:
(null as Type?).staticFunction(param1, param2)
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:
val SNavigation: Navigation? = null
fun Navigation?.createNavigateOnClickListener(@IdRes resId: Int, args: Bundle? = null, navOptions: NavOptions? = null,
navigationExtras: Navigator.Extras? = null) : (View) -> Unit {
//This is just implementation details, don't worry too much about them, just focus on the Navigation? part in the method declaration
return { view: View -> view.navigate(resId, args, navOptions, navigationExtras) }
}
Dans le code qui l'utilise:
SNavigation.createNavigateOnClickListener(R.id.action_gameWonFragment_to_gameFragment)
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.