Подтвердить что ты не робот

Расширение класса 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)

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

4b9b3361

Ответ 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.