我有一个带有构造函数的类,它由一个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)
^
模拟此类情况的最佳方法是什么?
答案 0 :(得分:13)
我相信:_*
会起作用
class StringMessage(charset: Charset, frames: String*) {
def this(frames: String*) = this(Charset.defaultCharset, frames: _*)
}
它指示编译器扩展Seq,所以它看起来像你写的:
this(Charset.defaultCharset, frames(0), frames(1), ....