Я пытаюсь определить класс с границами типов.
trait External[T]{
def deserialize( bytes: Array[Byte] ) : T
}
trait A
case class Hi(i: Int) extends A
class Foo[X >: A] extends External[X] {
def deserialize(bytes: Array[Byte]) : X = Hi(1)
}
scala> new Foo[Hi]
Но я получаю следующую ошибку:
<console>:14: error: type arguments [Hi] do not conform to class Foo's type parameter bounds [X >: A]
val res2 =
^
Что я делаю не так?как я могу решить это? РЕДАКТИРОВАТЬ: Если я попытаюсь отменить привязанный Foo [X <: A, Y <: A], я получу следующую ошибку: </p>
scala> class Foo[X <: A]{
def deserialize(bytes: Array[Byte]): X = Hi(1)
}
<console>:13: error: type mismatch;
found : Hi
required: X
def deserialize(bytes: Array[Byte]): X =Hi(1)
^
Я могу решить ееделать:
class Foo[X <: A]{
def deserialize(bytes: Array[Byte]): X = a.asInstanceOf[X]
}
Это идиоматический способ или есть лучший?