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

Kon*_*zik 5 groovy extension-methods jvm-languages 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
Run Code Online (Sandbox Code Playgroud)

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

请注意:我知道Kotlin对于这种特殊情况有相关的方法。不过,可能仍有Groovy方法对Kotlin用户有用。

Kon*_*zik 4

一种方法是在 Kotlin 中编写一个简单的包装扩展函数

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

fun Path.text(): String {
  return NioGroovyMethods.getText(this)
}
Run Code Online (Sandbox Code Playgroud)

然后可以像这样使用:

// 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()
}
Run Code Online (Sandbox Code Playgroud)

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

// in build.gradle

dependencies {
    compile 'org.codehaus.groovy:groovy-all:2.4.5'
}
Run Code Online (Sandbox Code Playgroud)