Мне нужна помощь в обобщениях Scala.
У меня есть следующие "абстрактные" черты:
trait Base[B <: Base[B,M], M <: Meta[B,M]] {
def meta: M
}
// Manages instances of a general type
trait Meta[B <: Base[B,M], M <: Meta[B,M]] {
// ...
}
// Manages Metas of a general type
trait Manager[M <: Meta[_,M]] {
def apply[N <: M](clazz: Class[N]): N
}
Затем я хочу определить более конкретную иерархию типов, например:
trait Thing[B <: Thing[B,M], M <: ThingMeta[B,M]] extends Base[B,M] {
// ...
}
trait ThingMeta[B <: Thing[B,M], M <: ThingMeta[B,M]] extends Meta[B,M]{
// ...
}
trait ThingManager extends *Manager[ThingMeta[_,_]]* {
// ...
}
Последнее объявление дает мне эту ошибку:
type arguments [ThingMeta[_, _]] do not conform to trait Manager's type parameter bounds [M <: Meta[_, M]]
Как я могу сказать, что ThingManager является диспетчером для всех ThingMetas и поэтому сам по себе не принимает параметр типа.