Расширение класса case scala без постоянного дублирования конструкторов vals?

Есть ли способ расширить класс case без постоянного сбора новых валов на этом пути? Например, это не работает.

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)

Это просто не кажется мне чистым.. Я что-то пропустил?

Ответ 1

Как отмечал предыдущий комментатор: следует избегать расширения класса case, но вы можете преобразовать свой класс Edge в черту.

Если вы хотите избежать частных утверждений, вы также можете пометить переменные как переопределить

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

Не забудьте выбрать def над val в чертах

Ответ 2

Это решение имеет некоторые преимущества перед предыдущими решениями:

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

Таким образом:

  • у вас нет избыточных val s, а
  • у вас есть 2 класса case.

Ответ 3

Классы классов не могут быть расширены путем подкласса. Вернее, подкласс класса case не может быть классом case.