В настоящее время я задаюсь вопросом, как составить объект / класс / черту, который соответствует одной характеристике для нескольких параметров типа. Скажем, у меня есть
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 не предназначена для таких вещей?