De hecho, tuve esta pregunta exacta hace 30 minutos, así que comencé a investigar y no pude encontrar ninguna solución o solución para esto, PERO mientras buscaba encontré esta sección en el sitio web de Kotlinglang que dice que:
Tenga en cuenta que las extensiones se pueden definir con un tipo de receptor anulable. Dichas extensiones se pueden invocar en una variable de objeto incluso si su valor es nulo.
Entonces tuve la idea más loca de todas, ¿por qué no definir una función de extensión con un receptor anulable (sin usar ese receptor) y luego llamarlo en un objeto nulo! Así que lo intenté y funcionó bastante bien, pero se veía tan feo. Fue así:
(null as Type?).staticFunction(param1, param2)
Así que hice eso creando un val en mi archivo de extensiones del tipo de receptor que tenía un valor nulo y luego lo usé en mi otra clase. Entonces, como ejemplo, así es como implementé una función de extensión "estática" para la Navigation
clase en Android: En mi archivo 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) }
}
En el código que lo usa:
SNavigation.createNavigateOnClickListener(R.id.action_gameWonFragment_to_gameFragment)
Obviamente, este no es un nombre de clase, es solo una variable del tipo de clase que tiene un valor nulo. Esto es obviamente feo en el lado del creador de extensiones (porque tienen que crear la variable) y en el lado del desarrollador (porque tienen que usar el SType
formato en lugar del nombre de la clase real), pero es lo más cercano que se puede lograr en este momento en comparación con las funciones estáticas reales. Con suerte, los creadores de idiomas de Kotlin responderán al problema que se creó y agregarán esa característica en el idioma.