我正在尝试使用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;的特征继承测试器中的(36,16)覆盖方法printConfig。 方法printConfig的类型不兼容
这可能只是一个愚蠢的问题,而且很容易解决。但是我有点卡住了。谁能为我指出正确的方向?我可能使用这些界限是错误的,还是这不是多态函数的直接用例?
答案 0 :(得分:2)
像这样吗?
next( n3 for n3 in list3 for lo3 in List_of_3_lists if a in lo3 and n3 in lo3 )
# 5627