Scala 如何实现通过类型参数';s型别名
我想为高级scala开发人员寻求一些帮助。我的问题是,我想访问属于类的父类的类型参数的类型别名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
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]