Интересно, может ли использование дженериков классов классов Scala сохранить некоторый шаблонный код.Использование общих классов классов в Scala
Спасем У меня есть следующий класс hieararchy эмулировать типа «вариант», что коробки набор типов и позволяет распаковка их с помощью сопоставления с образцом:
sealed abstract class Box;
case class DoubleBox(v: Double) extends Box;
case class StringBox(v: String) extends Box;
case class BooleanBox(v: Boolean) extends Box;
def typeName(b: Box) = b match {
case DoubleBox(v) => "Double"
case StringBox(v) => "String"
case BooleanBox(v) => "Boolean"
case _ => "Unknown"
}
Там может быть места в коде, где он будет было бы более удобно иметь дело с классами листьев, если они были дженериками. Что-то вроде:
sealed abstract class Box;
case class TypedBox[T](v: T) extends Box;
def typeName2(b: Box) = b match {
case TypedBox[Double](v) => "Double"
case TypedBox[String](v) => "String"
case TypedBox[Boolean](v) => "Boolean"
case _ => "Unknown"
}
Но это не скомпилировано. Насколько я понимаю, этот синтаксис не признан действительным синтаксисом Scala.
Можно ли сделать то, что я хочу работать, или это плохая идея, и я просто ничего не получаю?
EDIT: Vinicius ответил на мой вопрос, но, глядя на ответ, у меня есть другой вопрос. Можно ли каким-либо образом намекнуть компилятору, что для параметров TypedBox можно использовать только определенный список типов? Я хочу, чтобы убедиться, что компилятор еще может выполнить проверку полноты использования/соответствия TypedBox.
Это работает, спасибо! –