Kotlin:重载决议歧义

Kotlin : Overload resolution ambiguity

Kotlin 新手。我正在使用 Apache Camel 并使用 process 转换器创建了一条路线,如下所示:

from("snmp:blahblah...")
    .routeId("CamelSnmpRoute")
    ...
    .process {                          <<< Here
        logger.debug("Log stuff")
    }

错误:

Overload resolution ambiguity. All these functions match.
* public final fun process(processor: (() -> Processor!)!): RouteDefinition! defined in org.apache.camel.model.RouteDefinition
* public final fun process(processor: ((exchange: Exchange!) -> Unit)!): RouteDefinition! defined in org.apache.camel.model.RouteDefinition

我试过 .process { () -> 但它不喜欢那样,说它需要括号中的名称。同时,我可以使用 .process { exchange -> 而不是使用 exchange var 来克服错误,或者创建一个 logProcessor var 并将其传递给:

    .process(logProcessor)
}

private var logProcessor: Processor = Processor {
    logger.debug("Logging stuff")
}

谁能告诉我如何内联这个变量,以免产生歧义或冗余变量?

查看文档,我找不到这两个模棱两可的函数中的第一个。假设它来自 SAM 转换,在 Java 中它看起来像是采用某种 ProcessorFactory 接口的方法,在这种情况下,它几乎肯定会在内部调用工厂方法并将结果传递给第二个不明确的方法。

所以无论哪种方式,exchange 变量都会在某个时候存在。省略它只会将其名称更改为默认值 it.

如果您不打算使用函数参数,可以在其名称中使用下划线以提高可读性:

from("snmp:blahblah...")
    .routeId("CamelSnmpRoute")
    ...
    .process { _ -> logger.debug("Log stuff") }

你也可以这样表达具体的接口类型:

from("snmp:blahblah...")
    .routeId("CamelSnmpRoute")
    ...
    .process (Processor{ logger.debug("Log stuff") })