如何从Scala调用重载的Java varargs方法?

如何从Scala调用重载的Java varargs方法?,scala,Scala,我试图用varargs和非varargs版本调用多态方法 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))

我试图用varargs和非varargs版本调用多态方法

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
用这个Scala

logger.warn("{}-{}-{}", Array(1, 2, 3))
// produces [1, 2, 3]-{}-{}
Logger.warn(字符串,对象…)
由编译器在后端实现为
Logger.warn(字符串,对象[])
。Java编译器执行转换,允许JVM中的向后兼容性

在Scala中,我认为您必须通过传入数组来调用该方法。
Array(1,2,3)
是否产生与Java中的
Integer[]={1,2,3}
相同的输出

其他信息:

提到在某些情况下必须转换Scala数组。在文章的底部,您将看到讨论


您可能必须执行
Array(1,2,3)。如中所示的安装[Array[Integer]

不,Java版本做的是正确的,但Scala版本没有。@IanPhillips我在回答中添加了一些额外的信息。这有帮助吗?这篇文章似乎不正确,但它为我指明了正确的方向,所以是的,它有帮助!您必须按照您所描述的方式强制转换数组(尽管在实际代码中对[Object]进行数组,因为它是异构的),然后通过在末尾添加
:*
将其展开。