2012-12-04 20 views
6

Mam klasy z konstruktorem, który składa się z zestawu znaków i vararg typu String. Chcę konstruktora wygody z tylko vararg, który wywoła głównego konstruktora z defaultCharset i vararg.Przekazywanie varargs w konstruktorze podrzędnym

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

Niestety klasa I wykazały daje dwa błędy:

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

i

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) 
          ^

Jaki jest najlepszy sposób do modelowania tego typu sytuacji?

+1

Czy istnieje miejsce do głosowania za nieprzydatny komunikatów kompilatora? Nie widzę pierwszego błędu; i w 2.10, druga wiadomość została poprawiona na "nie można zastosować do (java.nio.charset.Charset, Seq [String])", dzięki czemu można zobaczyć Seq. –

Odpowiedz

13

wierzę, że :_* zadziała

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

To instruuje kompilator rozszerzyć nast tak to będzie wyglądać jak napisałeś:

this(Charset.defaultCharset, frames(0), frames(1), .... 
+0

To działało jak czar! – rancidfishbreath