2012-12-04 8 views
6

Ich habe eine Klasse mit einem Konstruktor, der aus einem Zeichensatz und einem Vararg des Typs String besteht. Ich möchte einen Convenience-Konstruktor mit nur dem Vararg, der den Hauptkonstruktor mit dem DefaultCharset und dem Vararg aufruft.Weitergabe von Varargs in einem sekundären Konstruktor

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

Leider ist die Klasse I gezeigt haben, gibt zwei Fehler:

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

und

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

Was ist der beste Weg, um diese Art von Situation zu modellieren?

+1

Gibt es einen Ort wählen für nicht hilfreich Compiler-Meldungen? Ich sehe den ersten Fehler nicht; und in 2.10 wird die zweite Nachricht auf "nicht anwendbar auf (java.nio.charset.Charset, Seq [String])" verbessert, so dass Sie die Seq sehen können. –

Antwort

13

Ich glaube, dass :_*

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

Es weist Compiler Seq zu erweitern arbeiten, so würde es aussehen, wie Sie schrieb:

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

Das funktionierte wie ein Charme! – rancidfishbreath

Verwandte Themen