具有以下代码:
log.info(“parameters {} and {}”,param1,param2)
在Scala中与SLF4J一起编译并很好地工作

但是,如果我想传递更多的参数,则需要使用Array:

log.info("parameters {} and {} and {}", Array(param1, param2,param3))

它只是将第一个参数替换为array.toString,而其余参数未绑定(bind)。

以下代码
log.info("parameters {} and {} and {}", Array(param1, param2,param3) : _*)

无法编译,原因是:
error: overloaded method value info with alternatives:
(org.slf4j.Marker,java.lang.String)Unit <and>
(java.lang.String,java.lang.Throwable)Unit <and>
(java.lang.String,Array[java.lang.Object])Unit <and>
(java.lang.String,Any)Unit
cannot be applied to (java.lang.String, Any)
log.info("parameters {} and {} and {}", Array(param1, param2,param3) : _*)

我在这里想念什么?

最佳答案

我想这全都取决于推断的类型。接受数组的log.info方法期望使用Array [AnyRef]。因此,作为 Actor 的替代选择,您可以做

log.info("parameters {} and {} and {}", Array[AnyRef](1, 2, "a"): _*)

但这是行不通的,因为Int-> AnyRef之间存在隐式转换的限制。对于这些,您需要输入类型说明:
log.info("parameters {} and {} and {}",
   Array[AnyRef](1: Integer, 2: Integer, "a"): _*)

有关更多详细信息,请参见此问题:Result type of an implicit conversion must be more specific than AnyRef

08-28 04:53