我试图打电话与两个可变参数和非可变参数版本的多态方法,如何从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