2015-11-25 2 views
14

Можно ли добавить новый статический метод в класс java.lang.Math в Kotlin? Обычно такие вещи возможны в Котлине благодаря Kotlin Extensions.Как добавить статические методы в классы Java в Kotlin

Я уже пробовал делать следующее в файле я сделал под названием Extensions.kt:

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

но Math.Companion не могли быть решены ...

+2

Почему бы не добавить функцию в класс Double? 'fun Double.clamp (min: Double, max Double)', который вызывается как '1.0.clamp (2.0, 3.0)'. – nhaarman

+0

Я думаю, что это будет возможно в будущих выпусках – voddan

+1

Не требует coerceIn (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/coerce-in.html), что вам нужно? –

ответ

7

Начиная с Kotlin 1.1, это невозможно. Тем не менее, это рассматривается для будущего выпуска!

Для этой функции будут реализованы, идти голосование по этому вопросу: https://youtrack.jetbrains.com/issue/KT-11968

Эта идея очень популярна в сообществе Котлин, так что я держал пари, что это будет в достаточно скоро.

+0

Тому, кто попадает в этот ответ, пожалуйста, проголосуйте за сообщение jetbrains, чтобы мы могли использовать эту функцию раньше! –

9

Я думаю, что это не возможно. Documentation says

Если класс имеет определенный объект-компаньон, вы также можете определить функции и свойства расширения для объекта-компаньона.

Math класса является Java классом, а не Kotlin один и не имеет companion объекта в нем. Вы можете добавить метод clamp к классу Double.

Смежные вопросы