Я получаю ошибки, компилируя следующий пример кода.
abstract class Base
case class A(i: Int) extends Base
case class B(s: String) extends Base
class Transform {
def func[T <: Base](arg: T): T = arg match {
case A(i) => A(i)
case B(s) => B(s)
}
}
ошибки
Example.scala:9: error: type mismatch;
found : A
required: T
case A(i) => A(i)
^
Example.scala:10: error: type mismatch;
found : B
required: T
case B(s) => B(s)
^
two errors found
Эти ошибки являются разумными.
Чтобы избежать этого, мне нужно поставить asInstanceOf[T]
за экземпляром как A(i).asInstanceOf[T]
.Тем не менее, раздражает делать это для всех возвращаемых значений, если имеется много шаблонов совпадений.
Кроме того, я хочу использовать класс Transform
в качестве родительского класса и переопределить func()
для выполненияконкретная операция, подобная приведенной ниже, код.
class ExtTransform extends Transform {
override def func[T <: Base](arg: T): T = arg match {
case A(i) => A(i + 1)
case _ => super.func(arg)
}
}
Есть ли лучшие способы или хитрость?