Композиция с одним и тем же признаком, но с разными параметрами типа

В настоящее время я задаюсь вопросом, как составить объект / класс / черту, который соответствует одной характеристике для нескольких параметров типа. Скажем, у меня есть

trait Dependent[T]{
  def observeCritereaChanged(oldValue:T, newValue:T):Unit
}

. Я хотел бы иметь возможность определить черту, реализующую Dependent для двух разных параметров типа, например

trait IntStrDependent extends Dependent[Int] with Dependent[String]

, чтобы экземпляры моей черты IntStrDependent должны были определять наблюдатьCritereaChanged для обоих типов:

class MyDependent extends IntStrDependent {
  def observeCritereaChanged(oldValue:Int, newValue:Int) = //...
  def observeCritereaChanged(oldValue:String, newValue:String) = //...
}

До сих пор мои усилия были встречены с ошибкой компиляции при попытке создать черту IntStrDependent :

scala> trait IntStrDependent extends Dependent[Int] with Dependent[String]
<console>:8: error: illegal inheritance;
 self-type IntStrDependent does not conform to Dependent[Int]'s selftype Dependent[Int]
       trait IntStrDependent extends Dependent[Int] with Dependent[String]
                                     ^
<console>:8: error: illegal inheritance;
 self-type IntStrDependent does not conform to Dependent[String]'s selftype Dependent[String]
       trait IntStrDependent extends Dependent[Int] with Dependent[String]
                                                         ^

Поэтому мой вопрос: есть ли способ делать то, что я пытаюсь сделать (если да, то как), или это безнадежное дело, потому что Scala не предназначена для таких вещей?

8
задан Dylan 14 August 2011 в 05:19
поделиться