扩展scala case类而不会不断重复构造函数vals?

有没有办法扩展一个案例class级,而不是一路拾起新的vals? 例如,这不起作用

case class Edge(a:Strl, b:Strl) case class EdgeQA(a:Strl, b:Strl, right:Int, asked:Int ) extends Edge(a,b) 

“a”与“a”冲突,所以我不得不重新命名为a1。 但我不想要各种额外的“a”公开的副本,所以我把它变成了私人的。

 case class Edge(a:Strl, b:Strl) case class EdgeQA(private val a1:Strl, private val b1:Strl, right:Int, asked:Int ) extends Edge(a,b) 

这只是对我来说似乎不干净..我错过了什么?

正如前面的评论者提到的:案例类扩展应该避免,但是你可以把你的边缘类转换成一个特征。

如果你想避免私人陈述,你也可以将variables标记为覆盖

 trait Edge{ def a:Strl def b:Strl } case class EdgeQA(override val a:Strl, override val b:Strl, right:Int, asked:Int ) extends Edge 

不要忘记在特质中更喜欢超过val

这个解决scheme比以前的解决scheme提供了一些优势

 trait BaseEdge { def a: Strl def b: Strl } case class Edge(a:Strl, b:Strl) extends BaseEdge case class EdgeQA(a:Strl, b:Strl, right:Int, asked:Int ) extends BaseEdge 

通过这种方式:

  • 你没有多余的值,和
  • 你有两个案例类。

案例类不能通过子类扩展。 或者说,案例类的子类本身不能是案例类。