2015-11-25 10 views
14

È possibile aggiungere un nuovo metodo statico alla classe java.lang.Math in Kotlin? Solitamente, tali cose sono possibili in Kotlin grazie a Kotlin Extensions.Come aggiungere metodi statici alle classi Java in Kotlin

ho già provato a fare quanto segue in un file che ho fatto chiamato Extensions.kt:

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

ma Math.Companion non poteva essere risolto ...

+2

Perché non aggiungere la funzione alla classe Doppia? 'fun Double.clamp (min: Double, max Double)', da chiamare come '1.0.clamp (2.0, 3.0)'. – nhaarman

+0

penso che sarà possibile nelle prossime versioni – voddan

+1

Non coerceIn (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/coerce-in.html) di cosa hai bisogno? –

risposta

7

A partire da Kotlin 1.1, questo non è possibile. Tuttavia, è stato considerato per una versione futura!

per aiutare questa caratteristica implementata ottenere, andare a votare su questo tema: https://youtrack.jetbrains.com/issue/KT-11968

Questa idea è molto popolare nella comunità Kotlin, quindi scommetto che sarà in abbastanza presto.

+0

A chi cade in questa risposta, si prega di votare il post dei jetbrain in modo da poter avere quella funzione in precedenza! –

9

Credo che questo non è possibile. il seguente:

Se una classe ha un oggetto associato definito, è anche possibile definire le funzioni di estensione e le proprietà per l'oggetto associato.

La classe Math è una classe Java, non un Kotlin uno e non avere un oggetto companion in esso. Puoi invece aggiungere un metodo clamp alla classe Double.