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



есть ли способ расширить класс case без постоянного подбора новых 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. Но я не хочу все виды дополнительных публичных копий "а", поэтому я сделал его частным.



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)


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

593   3  

3 ответов:

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

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

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 over val в черт

это решение предлагает некоторые преимущества по сравнению с предыдущими решениями:

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

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

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

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

Comments

    Ничего не найдено.