派生的Scala案例类,具有相同的成员变量作为基础

Dav*_*ave 9 scala

这样做有更好的方法吗?

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
Run Code Online (Sandbox Code Playgroud)

我用B扩展A并添加一个额外的成员变量.不要override val在x之前写字会很好.

ret*_*nym 15

我强烈建议不要从案例类继承.它对equals和hashCode产生了惊人的影响,并且在Scala 2.8中已被弃用.

相反,x在特征或抽象类中定义.

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

scala> case class B(val x: Int, y: Int) extends A
defined class B
Run Code Online (Sandbox Code Playgroud)

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

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

  • 确切地说,案例类不应该继承自其他案例类.让普通类从case类继承是可以的(也很常见). (12认同)