В настоящее время мне интересно составить объект / класс / черту, которая соответствует одной черте для параметров нескольких типов.
Допустим, у меня есть
trait Dependent[T]{
def observeCritereaChanged(oldValue:T, newValue:T):Unit
}
Я бы хотел иметь возможность определить некоторую черту, которая реализует зависимость для двух разных типов параметров, например
trait IntStrDependent extends Dependent[Int] with Dependent[String]
Так что экземпляры моей черты IntStrDependent
должны были бы определить observeCritereaChanged
для обоих типов:
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 не создан для таких вещей?