我想宣布一个这样的类:
class StringSetCreate(val s: String*) {
// ...
}
用Java来称呼它。问题是构造函数是类型的
public StringSetCreate(scala.collection.Seq)
所以在java中,你需要摆弄那些丑陋的scala序列。
我知道有一个@annotation.varargs
注释,如果在一个方法上使用,它会生成第二个方法,该方法接受java。
这个注释不适用于构造函数,至少我不知道该放在哪里。我找到了一个报告这个问题的Scala问题SI-8383。据我所知,目前没有解决办法。是这样的吗?有什么解决办法吗?我能用手来定义第二个构造函数吗?
发布于 2014-12-17 06:26:27
这个bug已经被归档为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
。
https://stackoverflow.com/questions/27526434
复制相似问题