如何在Scala中将共享超类型指定为参数?

时间:2014-03-13 16:18:51

标签: scala variance

我需要一些关于这种情况的帮助:

trait使用某些方法定义共享接口。 其中一种方法应该是这样的

 def fromConfig( config : Config): 

每个实现应该使用类似的方法覆盖方法:

  override def fromConfig(config: SubConfigA)

然而,这样做会给出“方法......无法覆盖”错误 即使配置内容定义为

  abstract class Config
  trait SubConfigA extends Config
  trait SubConfigB extends Config 
  ....

我记得,在Java中你实际上可以将接口定义为参数, 并使用子类中的子接口进行细化。

显然同样在Scala中不起作用。

上面的代码只是一个草稿,但这个想法正在传递 与特定实现匹配的特定配置 共享接口。

任何想法或建议都会受到最高的赞赏。

谢谢

1 个答案:

答案 0 :(得分:1)

这是你想要的吗?

abstract class Config
trait ConfigA extends Config
trait ConfigB extends Config

trait FromConfigLoader[C <: Config] {
  def fromConfig(config: C)
}

class TestA extends FromConfigLoader[ConfigA] {
 def fromConfig(config: ConfigA) = ???
}

class TestB extends FromConfigLoader[ConfigB] {
 def fromConfig(config: ConfigB) = ???
}