在 Kotlin 中使用 Groovy 的扩展方法有没有一种干净的方法?

Is there a clean way to use Groovy's extension methods in Kotlin?

例如,Groovy允许获取由java.nio.file.Path表示的文件的文本如下:

// Groovy code
import java.nio.file.Path
import java.nio.file.Paths

Path p = Paths.get("data.txt")
String text = p.text

我希望能够在 Kotlin 中重用 Groovy 的 text 扩展方法。

请注意:我知道 Kotlin has a related method 这种特殊情况。不过,可能会有 Groovy 对 Kotlin 用户有用的方法。

一种方法是在 Kotlin 中编写一个简单的包装器 extension function

// Kotlin code
import org.codehaus.groovy.runtime.NioGroovyMethods

fun Path.text(): String {
  return NioGroovyMethods.getText(this)
}

然后可以这样使用:

// Kotlin code
import java.nio.file.Path
import java.nio.file.Paths

fun usageExample() {
  val p: Path = Paths.get("data.txt")
  val text: String = p.text()
}

如果使用 Gradle 构建项目,这意味着 Groovy 必须添加到依赖项中:

// in build.gradle

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.4.5'
}