在构造函数上使用`@ annotation.varargs`

时间:2014-12-17 13:14:41

标签: scala

我想声明一个这样的类:

class StringSetCreate(val s: String*) {
 // ...
}

并在Java中调用它。问题是构造函数是

类型
public StringSetCreate(scala.collection.Seq)

所以在java中,你需要摆弄丑陋的scala序列。

我知道有@annotation.varargs注释,如果在方法上使用,会生成第二个获取java varargs的方法。

这个注释不适用于构造函数,至少我不知道在哪里放置它。我找到了Scala Issue SI-8383来报告此问题。据我所知,目前没有解决方案。这是正确的吗?有没有解决方法?我能以某种方式手动定义第二个构造函数吗?

1 个答案:

答案 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