我想声明一个这样的类:
class StringSetCreate(val s: String*) {
// ...
}
并在Java中调用它。问题是构造函数是
类型public StringSetCreate(scala.collection.Seq)
所以在java中,你需要摆弄丑陋的scala序列。
我知道有@annotation.varargs
注释,如果在方法上使用,会生成第二个获取java varargs的方法。
这个注释不适用于构造函数,至少我不知道在哪里放置它。我找到了Scala Issue SI-8383来报告此问题。据我所知,目前没有解决方案。这是正确的吗?有没有解决方法?我能以某种方式手动定义第二个构造函数吗?
答案 0 :(得分:1)
该错误已经归档为https://issues.scala-lang.org/browse/SI-8383。
对于解决方法,我建议使用工厂方法(可能在配套对象上),其中@varargs
应该有效:
object StringSetCreate {
@varargs def build(s: String*) = new StringSetCreate(s: _*)
}
然后在Java中,您拨打StringSetCreate.build("a", "b")
而不是使用new
。