科特林的新手。我正在使用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")
}
有人可以告诉我如何内联此变量,以免产生歧义或多余的变量吗?
答案 0 :(得分:3)
看文档,我找不到这两个模棱两可的函数中的第一个。假设它来自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") })