如何向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帖子,以便我们可以更早地拥有该功能!