我試圖打電話與兩個可變參數和非可變參數版本的多態方法,如何從Scala調用Java重載可變參數方法?
var logger = org.slf4j.LoggerFactory.getLogger("foo") // 1
logger.warn.("{}{}{}", 1, 2, 3) // 2
logger.warn.("{}{}{}", Array(1, 2, 3): _*) // 3
logger.warn.("{}{}{}", Array(1, 2, 3)) // 4
2號線不能編譯,給人一種「重載方法值警告替代品」的錯誤。 第3行不能編譯,給出「否」:此處允許使用_ *'註釋「錯誤。 第4行編譯,但在運行時調用了錯誤的方法,當我需要調用Logger.warn(String,Object...)
時,它調用Logger.warn(String,Object)
。
如何從Scala調用正確的方法?
比較這個Java代碼
logger.warn("{}-{}-{}", new Integer[] {1, 2, 3});
// produces 1-2-3
有了這個斯卡拉
logger.warn("{}-{}-{}", Array(1, 2, 3))
// produces [1, 2, 3]-{}-{}
不,Java版本沒有錯,但Scala版本沒有。 – 2014-11-21 17:02:24
@IanPhillips我在回答中添加了一些額外的信息。它有幫助嗎? – markbernard 2014-11-25 16:32:10
這篇文章似乎並不正確,但是它指出了我正確的方向,所以是的,它有幫助!你必須像你所描述的那樣轉換數組(儘管Array [Object]是實際代碼,因爲它是異構的),然後在末尾加上':_ *'來擴展它。 – 2014-11-27 09:22:50