具有以下代码:
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