扩展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
通过这种方式:
- 你没有多余的值,和
- 你有两个案例类。
案例类不能通过子类扩展。 或者说,案例类的子类本身不能是案例类。