У меня есть следующая иерархия классов:
class A
class B extends A
class C extends A
тогда существует еще один класс, который принимает экземпляры этих классов, и существует метод, в котором возможны два случая сопоставления шаблонов:
class D (one: A, two: A) {
def work {
(one, two) match {
case (o, t): (B, B) => ... blablabla
case (o, t): (B, C) => ... blablabla
case _ =>
}
}
}
Однако, когда он должен решить совпадение в пользу второго случая (B, C)
, он пытается разрешить его как (B, B)
и придумывает исключение класса cast, которое C cannot be cast to B
. Зачем? Что делать? Как я могу обойти это?