在辅助构造函数中传递varargs

时间:2012-12-04 17:59:44

标签: scala constructor variadic-functions

我有一个带有构造函数的类,它由一个Charset和一个String类型的vararg组成。我想要一个只有vararg的便捷构造函数,它将使用defaultCharset和vararg调用主构造函数。

class StringMessage(charset: Charset, frames: String*) {
  def this(frames: String*) = this(Charset.defaultCharset, frames)
}

不幸的是,我所展示的课程有两个错误:

called constructor's definition must precede calling constructor's definition

overloaded method constructor StringMessage with alternatives:
  (frames: String*)mypackage.StringMessage <and>
  (charset: java.nio.charset.Charset,frames: String*)mypackage.StringMessage
 cannot be applied to (java.nio.charset.Charset, String*)
  def this(frames: String*) = this(Charset.defaultCharset, frames)
                              ^

模拟此类情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:13)

我相信:_*会起作用

class StringMessage(charset: Charset, frames: String*) {
  def this(frames: String*) = this(Charset.defaultCharset, frames: _*)
}

它指示编译器扩展Seq,所以它看起来像你写的:

this(Charset.defaultCharset, frames(0), frames(1), .... 
相关问题