53

是否可以在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无法解决...

4

3 回答 3

47

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

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

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

于 2017-03-08T14:43:22.330 回答
14

我认为这是不可能的。文档说明如下:

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

该类Math是一个Java类,而不是一个类,并且Kotlin其中没有companion对象。您可以改为向类添加clamp方法。Double

于 2015-11-25T08:37:18.483 回答
3

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

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

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

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

val something = EnvironmentExtensions.getSomething()
于 2018-03-12T09:19:54.800 回答