是否有可能像普通函数那样引用扩展函数(参见此处)?
我希望下面的代码可以编译,但现在::String.toSomething
还不知道:
fun String.toSomething() = length + 1
val some = listOf("lala", "bebebe").map(::String.toSomething)
Run Code Online (Sandbox Code Playgroud)
你的意思是这样的吗?
fun String.toSomething() = length + 1
val some = listOf("lala", "bebebe").map(String::toSomething)
Run Code Online (Sandbox Code Playgroud)
只记得::
在函数之前总是放
在Kotlin中引用扩展方法可以通过::
在类名和方法名之间应用运算符来完成:
val function = Object::myExtensionMethod
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下:
fun String.toSomething() = length + 1
val some = listOf("lala", "bebebe").map(String::toSomething)
Run Code Online (Sandbox Code Playgroud)
OP 将扩展函数定义为独立函数。如果将扩展函数视为另一个类的一部分,则引用是不可能的。至少 Intellij 是这么告诉我的。
class MyClass {
// This function cannot be referenced.
fun Application.myExt() {
return "value"
}
}
Run Code Online (Sandbox Code Playgroud)
作为解决方法,我做了这样的事情:
class MyClass {
fun getMyExtFunction: (Application.() -> Unit) {
return {
return "value"
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我不再引用函数,而是从另一个方法返回该函数。结果是一样的。
归档时间: |
|
查看次数: |
839 次 |
最近记录: |