new generic functions fun extensions extension extended kotlin kotlin-extension

generic - ¿Cómo se pueden agregar métodos estáticos a las clases de Java en Kotlin?



new object in kotlin (3)

A partir de Kotlin 1.2 todavía no es posible.

Como solución temporal, para "ampliar" estáticamente la clase de entorno que estoy utilizando actualmente:

Class EnvironmentExtensions { companion object { @JvmStatic fun getSomething(): File { ... return Environment.something() } } }

No es una solución ideal, pero la finalización del código IntelliJ / Android Studio ayuda con el uso:

val something = EnvironmentExtensions.getSomething()

¿Es posible agregar un nuevo método estático a la clase java.lang.Math en Kotlin ? Generalmente, estas cosas son posibles en Kotlin gracias a las Extensiones Kotlin .

Ya intenté hacer lo siguiente en un archivo que hice llamado Extensions.kt :

fun Math.Companion.clamp(value:Double,minValue:Double,maxValue:Double):Double { return Math.max(Math.min(value,maxValue),minValue) }

pero Math.Companion no pudo ser resuelto ...


A partir de Kotlin 1.2, esto no es posible. Sin embargo, está siendo considerado para un futuro lanzamiento!

Para ayudar a implementar esta función, vaya a votar sobre este tema: https://youtrack.jetbrains.com/issue/KT-11968

Esta idea es muy popular en la comunidad de Kotlin, así que apuesto a que será muy pronto.


Creo que esto no es posible. La documentación dice lo siguiente:

Si una clase tiene un objeto compañero definido, también puede definir funciones de extensión y propiedades para el objeto compañero.

La clase de Math es una clase de Java , no una de Kotlin y no tiene un objeto companion . En su lugar, puede agregar un método de clamp a la clase Double .