[英]Scala and SLF4J :: pass multiple parameters
擁有以下代碼:log.info(“parameters {}和{}”,param1,param2)在Scala中編譯並與SLF4J一起使用
但是如果我想傳遞更多參數,我需要使用Array:
log.info("parameters {} and {} and {}", Array(param1, param2,param3))
它只是用array.toString替換第一個參數,並使其余參數保持未綁定狀態。
以下代碼
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]。 所以作為演員陣容的替代品,你可以做到
log.info("parameters {} and {} and {}", Array[AnyRef](1, 2, "a"): _*)
但這不起作用,因為對Int - > AnyRef之間的隱式轉換有限制。 對於那些,你需要一個類型歸屬:
log.info("parameters {} and {} and {}",
Array[AnyRef](1: Integer, 2: Integer, "a"): _*)
有關更多詳細信息,請參閱此問題: 隱式轉換的結果類型必須比AnyRef更具體
如果使用字符串插值怎么辦? 像這樣:
log.info(f"parameters ${param1} and ${param2} and ${param3}")
試試這個:
Array(...).asInstanceOf[Array[Object]]
我就是這樣做的。
LOGGER.info(“encode:{},code:{},length:{}”,Array(messageWrapper,methodCode,bytes.length).asInstanceOf [Array [AnyRef]])
干杯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.