Как добавить статические методы в классы Java в Котлине?
Можно ли добавить новый статический метод к java.lang.Math
класс в Kotlin
? Обычно такие вещи возможны в Kotlin благодаря Kotlin Extensions.
Я уже пытался сделать следующее в файле, который я сделал называется Extensions.kt
:
fun Math.Companion.clamp(value:Double,minValue:Double,maxValue:Double):Double
{
return Math.max(Math.min(value,maxValue),minValue)
}
но Math.Companion
не может быть решена...
4 ответа
Начиная с Kotlin 1.2 это невозможно. Тем не менее, он рассматривается для будущего выпуска!
Чтобы помочь реализовать эту функцию, проголосуйте по этому вопросу: https://youtrack.jetbrains.com/issue/KT-11968
Эта идея очень популярна в сообществе Kotlin, поэтому я уверен, что она скоро появится.
Я думаю, что это невозможно. Документация гласит следующее:
Если в классе определен сопутствующий объект, вы также можете определить функции и свойства расширения для сопутствующего объекта.
Math
класс Java
класс, а не Kotlin
один и не имеет companion
объект в этом. Вы можете добавить clamp
метод к Double
класс вместо.
Начиная с Kotlin 1.2 это все еще невозможно.
В качестве обходного пути для статического "расширения" класса Environment, который я сейчас использую:
Class EnvironmentExtensions {
companion object {
@JvmStatic
fun getSomething(): File {
...
return Environment.something()
}
}
}
Это не идеальное решение, но дополнение кода IntelliJ/Android Studio помогает с использованием:
val something = EnvironmentExtensions.getSomething()
Обновление поверх других ответов: статические расширения будут доступны сразу после версии 2.0.
Официальное объявление: kotlin conf 2023