如何在 Kotlin 中编写具有多个不同类型参数的 lambda?

How to write a lambda in Kotlin with multiple parameters of different types?

我正在为 Spring Webflux 中的 WebClient 响应编写异常处理程序。我没有在我的断片之前和之后包含代码,以保持简短和甜美。目前我有以下代码:

.retrieve()
.bodyToMono(String::class.java)
.doOnError {
  WebClientResponseException::class.java,
  error -> logger.error(error.getResponseBodyAsString()) 
}
.awaitSingle()

我是 Kotlin 和 Spring Webflux 的响应式编程的新手。我无法理解 IntelliJ 的意思

Unexpected tokens (use ';' to separate expressions on the same line)

我认为以下方法签名的语法正确:

<E extends Throwable> Mono<T> doOnError(Class<E> exceptionType, final Consumer<? super E> onError)

回答您的问题有点困难,因为您的 IDE 显示的 doOnError 函数似乎与您为其发布文档的函数不同。毕竟,IDE 表明 lambda 有效并且只有一个 Throwable 参数,但是您发布的文档需要两个参数。

如果您只想命名 lambda 参数,则必须在 lambda 的最开始就这样做:

.doOnError { error -> 
    // your code here
}

如果您需要指定第一个参数,您可以像在普通方法中那样在括号内指定:

.doOnError(WebClientResponseException::class.java) { error ->
    logger.error(error.getResponseBodyAsString())
}