【发布时间】:2018-04-18 02:26:15
【问题描述】:
由于我正在使用的特定库涉及宏和序列化,出于模糊的原因,我选择尝试使用类型成员而不是类的类型参数(背景:Is there a way to use ClassTags with the Autowire library in Scala?)
sealed trait Command {
type M <: CommandMetaData
val meta: M
}
final case class SysCmdMetaData(
// ...
) extends CommandMetaData
// How to guarantee cmd.M <: SysCmdMetaData
def runInSystem(cmd: Command){
//...
}
有没有办法静态地做到这一点?我认为使用类型类和上下文边界是一种选择,但我觉得它有点笨拙,因为我已经在这里使用了子类化。也许更好的选择是让元数据成为一种特征,更全面地拥抱面向对象,并根据混合的特征创建各种命令的变体。
【问题讨论】:
标签: scala