Scala 如何实现通过类型参数';s型别名

Scala 如何实现通过类型参数';s型别名,scala,generics,type-erasure,type-parameter,type-alias,Scala,Generics,Type Erasure,Type Parameter,Type Alias,我想为高级scala开发人员寻求一些帮助。我的问题是,我想访问属于类的父类的类型参数的类型别名 case class MyModel(foo: String = "bar") case class MyDispatcher() trait Module[M, D] { type Dispatcher = D type Model = M } trait MySpecificModule[A <: Module[_, _]] { def di

我想为高级scala开发人员寻求一些帮助。我的问题是,我想访问属于类的父类的类型参数的类型别名

  case class MyModel(foo: String = "bar")

  case class MyDispatcher()

  trait Module[M, D] {
    type Dispatcher = D
    type Model = M
  }

  trait MySpecificModule[A <: Module[_, _]] {
    def dispatcher(): A#Dispatcher
  }

  class ModuleClass extends Module[MyModel, MyDispatcher] {
    //...
  }

  class MySpecificModuleClass extends MySpecificModule[ModuleClass] {
    override def dispatcher(): MyDispatcher = MyDispatcher()
  }
如果你能给我提些建议,我将不胜感激。提前感谢,, 加博

已解决

case class MyModel(foo: String = "bar")

case class MyDispatcher()

trait AbstractModule {
  type Dispatcher
  type Model
}

trait Module[M, D] extends AbstractModule {
  type Dispatcher = D
  type Model = M
}

trait MySpecificModule[A <: AbstractModule] {
  def dispatcher(): A#Dispatcher
}

class ModuleClass extends Module[MyModel, MyDispatcher] {
  //...
}

class MySpecificModuleClass extends MySpecificModule[ModuleClass] {
  override def dispatcher(): MyDispatcher = MyDispatcher()
}
案例类MyModel(foo:String=“bar”) 案例类MyDispatcher() 特征提取模块{ 类型调度器 类型模型 } 特征模块[M,D]扩展了抽象模块{ 类型Dispatcher=D 型号=M }
trait MySpecificModule[A我不完全理解Scala的推理,但是如果你去掉类型参数,事情就开始起作用了:

case class MyModel(foo: String = "bar")

case class MyDispatcher()

trait Module {
  type Dispatcher
  type Model
}

trait MySpecificModule[A <: Module] {
  def dispatcher(): A#Dispatcher
}

class ModuleClass extends Module {
  type Model = MyModel
  type Dispatcher = MyDispatcher
  //...
}

class MySpecificModuleClass extends MySpecificModule[ModuleClass] {
  override def dispatcher(): MyDispatcher = MyDispatcher()
}
case class MyModel(foo: String = "bar")

case class MyDispatcher()

trait Module {
  type Dispatcher
  type Model
}

trait MySpecificModule[A <: Module] {
  def dispatcher(): A#Dispatcher
}

class ModuleClass extends Module {
  type Model = MyModel
  type Dispatcher = MyDispatcher
  //...
}

class MySpecificModuleClass extends MySpecificModule[ModuleClass] {
  override def dispatcher(): MyDispatcher = MyDispatcher()
}
trait AbstractModule[M, D] extends Module {
  type Model = M
  type Dispatcher = D
}

class ModuleClass extends AbstractModule[MyModel,MyDispatcher]