如何在Kotlin中定义静态扩展方法?这甚至可能吗?我目前有一个扩展方法,如下所示.
public fun Uber.doMagic(context: Context) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
可以在实例上调用上述扩展名.
uberInstance.doMagic(context) // Instance method
Run Code Online (Sandbox Code Playgroud)
但是如何使它成为静态方法,如下所示.
Uber.doMagic(context) // Static or class method
Run Code Online (Sandbox Code Playgroud) 是否可以创建一个扩展函数并将其称为静态?
fun System.sayByeAndExit() {
println("Goodbye!")
System.exit()
}
fun main(args: Array<String>) {
System.sayByeAndExit() // I'd like to be able to call this
}
Run Code Online (Sandbox Code Playgroud)
我理解kotlin的扩展函数是静态解析的,如Kotlin Reference(扩展函数)中所述,但这并不意味着它们可以被调用,就好像它们是类中的静态函数(在Java意义上).
我也明白这个代码不起作用,因为没有 System的实例传递给编译器将生成的方法; 因此它不会编译.
有些人可能想知道为什么这种行为是可取的.我能理解为什么你会认为不是,所以这里有一些原因:
Kotlin有办法将静态函数"挂钩"到类中吗?我很想知道.
我正在学习科特林。据我了解,扩展功能提供了使用新功能扩展类的能力,而不必从类中继承。我正在为创建扩展功能okhttp3.RequestBody。但是我无法在自己的活动中获得方法。
这是我的扩展功能:
fun RequestBody.createPlainRequestBody(message: String): RequestBody = RequestBody.create(MediaType.parse("text/plain"), message)
Run Code Online (Sandbox Code Playgroud)
如下调用函数时,我得到了未解决的函数
RequestBody.createPlainRequestBody()
Run Code Online (Sandbox Code Playgroud)
当我为烤面包创建扩展功能时,我得到了如下完美的结果:
fun Context.showToast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
Run Code Online (Sandbox Code Playgroud)
通过致电:
this@MainActivity.showToast("Upload successfully")
Run Code Online (Sandbox Code Playgroud)
可以提供任何指南来解决此问题吗?