参考扩展功能?

时间:2016-11-14 15:11:25

标签: kotlin

是否可以像普通函数那样引用扩展函数(参见here)?

我希望编译以下代码,但现在::String.toSomething未知:

fun String.toSomething() = length + 1
val some = listOf("lala", "bebebe").map(::String.toSomething)

3 个答案:

答案 0 :(得分:6)

你的意思是这样吗?

fun String.toSomething() = length + 1
val some = listOf("lala", "bebebe").map(String::toSomething)

请记住将::始终放在函数

之前

答案 1 :(得分:5)

在Kotlin中引用扩展方法可以通过在类名和方法名之间应用::运算符来完成:

val function = Object::myExtensionMethod

所以在你的情况下:

fun String.toSomething() = length + 1
val some = listOf("lala", "bebebe").map(String::toSomething)

答案 2 :(得分:1)

OP将扩展功能定义为独立功能。如果将扩展功能视为另一个类的一部分,则该引用为不可能。至少Intellij告诉过我。

class MyClass {
  // This function cannot be referenced.
  fun Application.myExt() {
    return "value"
  }
}

作为解决方法,我做了这样的事情:

class MyClass {
  fun getMyExtFunction: (Application.() -> Unit) {
    return {
      return "value"
    }
  }
}

现在我不再引用一个函数,而是从另一个方法返回这个函数。结果是一样的。