In realtà ho avuto questa domanda esatta 30 minuti fa, quindi ho iniziato a scavare e non sono riuscito a trovare alcuna soluzione o soluzione alternativa, MA durante la ricerca ho trovato questa sezione sul sito Web di Kotlinglang che afferma che:
Si noti che le estensioni possono essere definite con un tipo di ricevitore nullable. Tali estensioni possono essere richiamate su una variabile oggetto anche se il suo valore è nullo.
Quindi ho avuto l'idea più folle di sempre, perché non definire una funzione di estensione con un ricevitore nullable (senza effettivamente utilizzare quel ricevitore) e quindi chiamarla su un oggetto null! Quindi l'ho provato, e ha funzionato abbastanza bene, ma sembrava così brutto. Era così:
(null as Type?).staticFunction(param1, param2)
Quindi ho aggirato il problema creando un valore nel mio file delle estensioni del tipo destinatario che aveva un valore null e quindi lo usavo nell'altra mia classe. Quindi, ad esempio, ecco come ho implementato una funzione di estensione "statica" per la Navigation
classe in Android: Nel mio file 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) }
}
Nel codice che lo utilizza:
SNavigation.createNavigateOnClickListener(R.id.action_gameWonFragment_to_gameFragment)
Ovviamente, questo non è un nome di classe, è solo una variabile del tipo di classe che ha un valore nullo. Questo è ovviamente brutto dal lato del produttore dell'estensione (perché devono creare la variabile) e dal lato dello sviluppatore (perché devono usare il SType
formato anziché il nome della classe effettiva), ma è il più vicino che può essere raggiunto in questo momento rispetto alle effettive funzioni statiche. Si spera che i produttori di lingue Kotlin risponderanno al problema creato e aggiungano tale funzionalità nella lingua.