6

Charset と String 型の vararg で構成されるコンストラクタを持つクラスがあります。defaultCharset と vararg を使用してメイン コンストラクターを呼び出す、vararg のみを使用する便利なコンストラクターが必要です。

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

残念ながら、私が示したクラスでは 2 つのエラーが発生します。

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 に答える