是否可以在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)
}
Run Code Online (Sandbox Code Playgroud)
但Math.Companion无法解决......
例如,我有Java类(来自外部库):
class A {} // This is Java class
Run Code Online (Sandbox Code Playgroud)
我想添加写在Kotlin上的扩展函数,并将其命名为:
A.foo() // This is call of extension function `foo` from Kotlin code
Run Code Online (Sandbox Code Playgroud)
据我所知,目前在Kotlin中是不可能的,因为它仅支持伴随对象的KClass-es的 "静态"扩展功能.对?
似乎没有什么可以防止以后在Kotlin中实现这样的功能.对?
是否可以添加类似于向伴随对象添加扩展函数的静态扩展函数.我试过了
public fun ByteBuffer.Companion.invoke(capacity: Int): ByteBuffer
Run Code Online (Sandbox Code Playgroud)
但它引起了未解决的引用:伴侣.我只假设这是因为Companion没有在java代码中定义.
正如我们所知(在这个问题中提到,无数人写了相同的答案),我们可以为伴随对象使用扩展方法,使某些东西看起来像“静态扩展”。
但是当我尝试这个时kotlin.Array,我失败了:
operator fun <T> Array<T>.Companion.invoke() {
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致此错误:

那么Arrays 有伴生对象吗?如果不是,我怎样才能为Arrays制作“静态扩展” ?
编辑:
inline operator fun <reified T> Array<T>.Companion.invoke() {
}
Run Code Online (Sandbox Code Playgroud)
这段代码也失败了。
我想为 Android 内置ConnectivityManager类创建一个扩展函数,以便我的项目中的任何类都可以静态使用它。我只使用 Kotlin。
fun ConnectivityManager.checkInternet(context: Context): Boolean {
val manager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val connection = manager.activeNetworkInfo
if (connection != null && connection.isConnectedOrConnecting) {
return true
}
return false
}
Run Code Online (Sandbox Code Playgroud)
我可以通过创建 的对象来访问此函数,ConnectivityManager但我想做的是静态使用它。有什么可能吗?