上限类型多态方法Scala

时间:2019-05-27 20:59:55

标签: scala polymorphism type-bounds

我正在尝试使用Scala中的一些通用函数,但似乎无法使以下示例正常工作:

我遇到以下(简化)问题。我有一个父配置(这是一个特征)和两个从该父配置继承的案例类。他们都增加了一个额外的论点。然后,我进一步获得了另一个父代特征和2个扩展该特征的子类。这些子类都实现了parent方法,它应该同时具有get config和print config函数。然后,在我的主类中,运行运行程序函数,该函数应首先获取配置,然后打印配置。

我尝试过的是:更改父级和子级中的边界。我也尝试更改返回类型。但是,这似乎不起作用。


trait ParentConfig{val input : String}

case class ConfigOne(input:String, extraArg:String) extends ParentConfig

case class ConfigTwo(input:String, extraTwo:String) extends ParentConfig

trait inheritanceTester {

  def getConfig[A >: ParentConfig](): A

  def printConfig[A <: ParentConfig](conf: A): Unit
}


class ExtensionOne extends inheritanceTester {
 def getConfig[A >: ConfigOne](): A = {
   ConfigOne("test1","testOne")
 }

  def printConfig[A <: ConfigOne](conf:A): Unit  = {
    println(conf.extraArg)
  }
}

class ExtensionTwo extends inheritanceTester {
  def getConfig[A >: ConfigTwo](): A = {
    ConfigTwo("test2","testTwo")
  }

  override def printConfig[A <: ConfigTwo](conf:A): Unit  = {
    println(conf.extraTwo)
  }
}
object Main extends App {

  def run[A <: inheritanceTester](input: A): Unit = {
    val conf = input.getConfig()
    input.printConfig(conf)
  }

  val extensionOne = new ExtensionOne()
  run(extensionOne)

  val extensionTwo = new ExtensionTwo()
  run(extensionTwo)
}


此时,编译时出现以下错误消息:

错误:(26,7)在特征继承类型为[A <:collections.ParentConfig](conf:A)Unit;的traitInheritanceTester中覆盖方法printConfig。  方法printConfig的类型不兼容

错误:类型[A <:collections.ParentConfig](conf:A)Unit;的特征继承测试器中的(3​​6,16)覆盖方法printConfig。  方法printConfig的类型不兼容

这可能只是一个愚蠢的问题,而且很容易解决。但是我有点卡住了。谁能为我指出正确的方向?我可能使用这些界限是错误的,还是这不是多态函数的直接用例?

1 个答案:

答案 0 :(得分:2)

像这样吗?

next( n3 for n3 in list3 for lo3 in List_of_3_lists if a in lo3 and n3 in lo3 )

# 5627