Kotlin 是否(或何时)支持给一个 class/interface 扩展 一个扩展函数


#1

比如给 String 类扩展一个 Char.foo(x: Int) 的函数。


#2

那要怎么用呢?


#3

like this

"123".run {
    'c'.foo(1)
}

#4

其实就是多个receiver的扩展。这个确实有人提过,对函数式的实现会比较有帮助,不过貌似优先级并不高。

如果是自己的类,你可以直接在类当中定义其他类的扩展。已经定义好的第三方得类确实不行。


#5
  class StringExtension(val value:String) {

    fun Char.foo() {}

    operator fun invoke(block:String.()->Unit) {
      block(value)
    }
  }

  fun String.run(block:StringExtension.(StringExtension)->Unit) {
    val extension = StringExtension(this)
    extension.block(extension)
  }

  "SS".run {it{
    'c'.foo()
  }}
  

京ICP备16022265号-2 Kotlin China 2017 - 2018