4

我的系统中有一条旧消息,我希望能够将它映射到我系统中的新版本消息。

为什么我不能重载我的案例类?

case class Message(a:Int, b:Int)
case class NewMessage(a:Int, b:Int, c:Int) {
  def this(msg : Message) = this(a = msg.a, b = msg.b, c = 0)
}
val msg = Message(1,2)
val converted = NewMessage(msg)

此代码似乎无法编译。:(

4

2 回答 2

11

您正在重载构造函数,而您想要做的是重载 apply 方法。您可以在伴随对象上执行此操作:

case class NewMessage(a: Int, b: Int, c: Int) 

object NewMessage {
  def apply(msg: Message) = new NewMessage(a = msg.a, b = msg.b, c = 0)
}

val converted = NewMessage(msg)
于 2012-06-04T21:32:37.933 回答
6

您必须使用new运算符显式调用构造函数:

val converted = new NewMessage(msg)

它之所以有效,是因为您实际上是在NewMessage普通的时候定义了第二个构造函数:

NewMessage(1, 2, 3)

被翻译成:

NewMessage.apply(1, 2, 3)
于 2012-06-04T21:22:17.280 回答