拥有以下代码:
log.info(“parameters {} and {}”,param1,param2)
编译并在 Scala中与SLF4J一起使用
log.info(“parameters {} and {}”,param1,param2)
编译并在 Scala中与SLF4J一起使用
但是如果我想传递更多参数,我需要使用Array:
log.info("parameters {} and {} and {}",Array(param1,param2,param3))
它只是用array.toString替换第一个参数,并使其余参数保持未绑定状态.
以下代码
log.info("parameters {} and {} and {}",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 {}",param3) : _*)
我在这里错过了什么?
解决方法
我猜这一切都取决于推断的类型.采用数组的log.info方法需要一个Array [AnyRef].所以作为演员阵容的替代品,你可以做到
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