6

我有一个带有构造函数的类,它由一个字符集和一个字符串类型的可变参数组成。我想要一个仅带有 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)
                              ^

模拟这种情况的最佳方法是什么?

4

1 回答 1

13

我相信这:_*会奏效

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

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

this(Charset.defaultCharset, frames(0), frames(1), .... 
于 2012-12-04T18:05:03.487 回答