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