我正在学习科特林。据我了解,扩展功能提供了使用新功能扩展类的能力,而不必从类中继承。我正在为创建扩展功能okhttp3.RequestBody
。但是我无法在自己的活动中获得方法。
这是我的扩展功能:
fun RequestBody.createPlainRequestBody(message: String): RequestBody = RequestBody.create(MediaType.parse("text/plain"), message)
如下调用函数时,我得到了未解决的函数
RequestBody.createPlainRequestBody()
当我为烤面包创建扩展功能时,我得到了如下完美的结果:
fun Context.showToast(message: String) { Toast.makeText(this, message, Toast.LENGTH_SHORT).show() }
通过致电:
this@MainActivity.showToast("Upload successfully")
可以提供任何指南来解决此问题吗?
扩展功能可以应用于特定类的实例,但是您试图在类上调用它,就好像它是静态方法一样。而且,您的扩展函数需要一个参数,而您不提供任何参数。
在这种情况下,您需要一个简单的函数来创建一个,RequestBody
因为您没有作用于的任何特定实例RequestBody
。
在底层,扩展函数只是一个静态方法,其中第一个参数是接收器对象,而其他任何参数都移动一个。您的showToast
扩展功能等效于以下Java代码段:
public static void showToast(Context receiver, String message) { Toast.makeText(receiver, message, ...).show(); }
这就是为什么您可以从Java调用Kotlin扩展功能的原因。