Шаблон Scala --сопоставление кортежа связанных типов

У меня есть следующая иерархия классов:

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)и выдает исключение приведения класса, которое C cannot be cast to B. Почему? Что делать? Как я могу обойти это?

20
задан noncom 16 August 2012 в 12:23
поделиться