我想获得一些帮助,以了解有关 Http4korg.http4k.core包中使用的功能接口的 Kotlin 代码片段
typealias HttpHandler = (Request) -> Response
fun interface Filter : (HttpHandler) -> HttpHandler {
companion object
}
Run Code Online (Sandbox Code Playgroud)
我不了解Filter界面,尤其是companion object部分。一个典型的功能界面是这样的
fun interface IntPredicate {
fun accept(i: Int): Boolean
}
Run Code Online (Sandbox Code Playgroud)
你可以创建一个 lambda isEven
val isEven = IntPredicate { it % 2 == 0 }
Run Code Online (Sandbox Code Playgroud)
根据这个简单的例子,看起来接口Filter扩展了另一个接口(HttpHandler) -> HttpHandler?然后它定义了一个函数签名companion object?这样对吗?这部分的companion object真正含义是什么?
我正在尝试使用 ShadowJar 构建一个 fatjar。我的应用程序和 gradle 代码如下。我使用 Gradle 5.0 进行构建。当我运行 ./gradlew run 时,代码有效。当我运行“gradle Shadowjar”,并在“build/lib”文件夹中使用“java -jar”运行 fatjar 时,出现以下错误。
我猜依赖项没有加载到 fatjar 中?我还使用 Groovy 构建 Gradle 文件,但遇到了同样的错误。
我没有在 fatjar 文件中包含所有依赖项,这是否正确?如果是这种情况,您知道如何修改 Gradle 文件以确保包含此文件吗?
Gradle Kotlin DSL
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
// Apply the Kotlin JVM plugin to add support for Kotlin on the JVM.
id("org.jetbrains.kotlin.jvm").version("1.3.21")
id("com.github.johnrengelman.shadow") version "5.0.0"
// Apply the application plugin to add support for building a CLI application.
application
}
repositories {
// Use jcenter for resolving your dependencies.
// …Run Code Online (Sandbox Code Playgroud)