如何在Kotlin中为Java类添加静态方法

时间:2015-11-25 08:18:47

标签: kotlin kotlin-extension

是否可以向java.lang.Math中的Kotlin类添加新的静态方法?通常,感谢Kotlin Extensions,Kotlin可以做到这一点。

我已经尝试在名为Extensions.kt的文件中执行以下操作:

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

但无法解析Math.Companion ...

3 个答案:

答案 0 :(得分:31)

从Kotlin 1.3开始,这是不可能的。但是,它正在考虑将来发布!

要帮助实施此功能,请对此问题进行投票:https://youtrack.jetbrains.com/issue/KT-11968

这个想法在Kotlin社区很受欢迎,所以我打赌它会很快就会出现。

答案 1 :(得分:10)

我认为这是不可能的。 Documentation says以下内容:

  

如果某个类定义了一个伴随对象,您还可以为该伴随对象定义扩展函数和属性。

Math类是Java类,而不是Kotlin类,并且没有companion个对象。您可以将clamp方法添加到Double类中。

答案 2 :(得分:2)

至于Kotlin 1.2,它仍然是不可能的。

作为一种解决方法,静态地扩展"我目前正在使用的环境类:

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

这不是一个理想的解决方案,但IntelliJ / Android Studio代码完成有助于使用:

val something = EnvironmentExtensions.getSomething()