Derived Scala case class with same member variable

2020-05-27 11:18发布

问题:

Is there a nicer way of doing this?

scala> case class A(x : Int)
defined class A

scala> case class B(override val x : Int, y : Int) extends A(x)
defined class B

I'm extending A with B and adding an extra member variable. It would be nice not to have to write override val before the x.

回答1:

I would strongly advise not to inherit from a case class. It has surprising effects on equals and hashCode, and has been deprecated in Scala 2.8.

Instead, define x in a trait or an abstract class.

scala> trait A { val x: Int }
defined trait A

scala> case class B(val x: Int, y: Int) extends A
defined class B

http://www.scala-lang.org/node/3289

http://www.scala-lang.org/node/1582



标签: scala