【发布时间】:2015-04-19 20:46:10
【问题描述】:
这是另一个与可变参数功能相关的 scala-java 兼容性问题。关键区别在于java的部分是重载的。
它类似于这个 scala 代码:
object Test {
def test( xa : String* ) = print( xa.mkString(",") )
def test( xs : Seq[String] ) = print( xs.mkString(",") )
}
Scala 与 java 不同,将此类重载标记为无效
error: double definition:
def test(xa: String*): Unit at line 11 and
def test(xs: Seq[String]): Unit at line 12
have same type after erasure: (xa: Seq)Unit
def test( xs : Seq[String] ) = print( xs.mkString(",") )
^
但是java同意编译类似的构造。
这让 scala 感到惊讶,它在尝试调用适当的 java 方法时会产生错误。 scala 编译器留下“这里不允许使用 `:_*' 注释(这种注释只允许在 *-parameters 的参数中)”消息
在这种情况下如何正确调用可变参数方法?
我在scala issues tracker中发现了相应的bug
【问题讨论】:
-
你可以在你的帖子中添加java方法的签名吗?
-
见 javafx.collections.ObservableList.addAll 它可能被其他重载形式调用,但我对 vararg 调用感到好奇。
-
我认为你必须向我们展示你是如何从 Scala 调用这些方法的;根据您的描述,我无法重现这种情况...
标签: java scala overloading variadic-functions