Ich hatte genau diese Frage vor 30 Minuten, also fing ich an zu graben und konnte keine Lösung oder Problemumgehung dafür finden, ABER während der Suche fand ich diesen Abschnitt auf der Kotlinglang-Website, der besagt:
Beachten Sie, dass Erweiterungen mit einem nullbaren Empfängertyp definiert werden können. Solche Erweiterungen können für eine Objektvariable aufgerufen werden, auch wenn ihr Wert null ist.
Also hatte ich die verrückteste Idee aller Zeiten, warum nicht eine Erweiterungsfunktion mit einem nullbaren Empfänger definieren (ohne diesen Empfänger tatsächlich zu verwenden) und sie dann für ein Nullobjekt aufrufen! Also habe ich das versucht und es hat ziemlich gut funktioniert, aber es sah so hässlich aus. Es war so:
(null as Type?).staticFunction(param1, param2)
Also habe ich das umgangen, indem ich in meiner Erweiterungsdatei vom Empfängertyp einen Wert mit dem Wert null erstellt und ihn dann in meiner anderen Klasse verwendet habe. Als Beispiel habe ich hier eine "statische" Erweiterungsfunktion für die Navigation
Klasse in Android implementiert : In meiner NavigationExtensions.kt-Datei:
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) }
}
In dem Code, der es verwendet:
SNavigation.createNavigateOnClickListener(R.id.action_gameWonFragment_to_gameFragment)
Offensichtlich ist dies kein Klassenname, sondern nur eine Variable des Klassentyps, die einen Nullwert hat. Dies ist offensichtlich hässlich auf der Seite des Erweiterungsherstellers (weil sie die Variable erstellen müssen) und auf der Entwicklerseite (weil sie das SType
Format anstelle des tatsächlichen Klassennamens verwenden müssen), aber es ist das nächste, das derzeit erreicht werden kann im Vergleich zu tatsächlichen statischen Funktionen. Hoffentlich werden die Kotlin-Sprachhersteller auf das erstellte Problem reagieren und diese Funktion in die Sprache aufnehmen.