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

How can one add static methods to Java classes in Kotlin

是否可以在 Kotlin 中的 java.lang.Math class 中添加一个新的静态方法?通常,由于 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无法解决...

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

If a class has a companion object defined, you can also define extension functions and properties for the companion object.

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

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

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

这个想法在 Kotlin 社区中非常流行,所以我打赌它很快就会出现。

从 Kotlin 1.2 开始,这仍然是不可能的。

作为解决方法,静态 "extend" 环境 class 我目前使用:

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

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

val something = EnvironmentExtensions.getSomething()