如何在 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()
是否可以在 Kotlin
中的 java.lang.Math
class 中添加一个新的静态方法?通常,由于 Kotlin Extensions.
我已经尝试在我创建的名为 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()