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

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...