Расширение класса 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)
Это просто не кажется мне чистым.. я что-то упустил?
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не забудьте предпочитают
defovervalв черт
это решение предлагает некоторые преимущества по сравнению с предыдущими решениями:
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