Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

case class overloading in Scala

I have a legacy message in my system, and I would like to be able to map it new version the message in my system.

Why can't I overload my case class?

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)

This code doesn't seem to compile. :(

like image 609
Terenced Avatar asked Dec 03 '22 03:12

Terenced


1 Answers

You're overloading the constructor, while what you want to do is overload the apply method. You can do this on the companion object:

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)
like image 91
Knut Arne Vedaa Avatar answered Dec 05 '22 16:12

Knut Arne Vedaa