标签: http4k

如何理解带有配套对象的 Kotlin 功能接口?

我想获得一些帮助,以了解有关 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真正含义是什么?

kotlin functional-interface http4k

4
推荐指数
1
解决办法
54
查看次数

使用 Kotlin DSL 构建 Fatjar 时出错

我正在尝试使用 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)

gradle kotlin gradle-kotlin-dsl http4k kotlin-dsl

2
推荐指数
1
解决办法
599
查看次数