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

如何向Kotlin中的Java类添加静态方法,kotlin,kotlin-extension,Kotlin,Kotlin Extension,是否可以向Kotlin中的java.lang.Math类添加新的静态方法?通常情况下,在科特林这样的事情是可能的,这要归功于 我已经在一个名为Extensions.kt的文件中尝试了以下操作: fun Math.Companion.clamp(value:Double,minValue:Double,maxValue:Double):Double { return Math.max(Math.min(value,maxValue),minValue) } 但是Math.Companio

是否可以向
Kotlin
中的
java.lang.Math
类添加新的静态方法?通常情况下,在科特林这样的事情是可能的,这要归功于

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

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

但是
Math.Companion
无法解决…

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

如果类定义了伴生对象,则还可以为伴生对象定义扩展函数和属性


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

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

要帮助实现此功能,请对此问题进行投票:


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

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

作为一种解决方法,要静态“扩展”我当前使用的环境类:

Class EnvironmentExtensions {
    companion object {
        @JvmStatic
        fun getSomething(): File {
            ...
            return Environment.something()
        }
    }
}
这不是一个理想的解决方案,但IntelliJ/Android Studio代码完成有助于使用:

val something = EnvironmentExtensions.getSomething()

为什么不把这个函数添加到Double类中呢
fun Double.clamp(最小值:Double,最大值Double)
,被称为
1.0.clamp(2.0,3.0)
。我认为在未来的发行版中这是可能的。不必强制()您需要什么?是的!谢谢@SergeyMashkov,这就是我在这个案子中需要的。然而,我应该将我的问题重新表述为:“如何在Kotlin中向Java类添加静态方法”@Eric那么你唯一能做的就是声明顶级函数(而不是扩展)并将其放到特定的包中。无论谁在这个答案中,请投票支持jetbrains帖子,以便我们可以更早地拥有该功能!