我有以下基类:
trait Foo
abstract class Bar[A <: Foo](f : A*) extends Foo
然后我想创建一个子类:
case class Baz(f : Foo*) extends Bar(f)
但是,当我这样做时,编译器会感到不安,告诉我:
inferred type arguments [Seq[Foo]] do not conform to class Bar's type parameter bounds [A <: Foo]
向 Bar 添加显式类型参数,如
case class Baz(f : Foo*) extends Bar[Foo](f)
然后提示类型不匹配 - 在需要 Foo 时找到了 Foo*。
这是什么原因造成的?我该如何解决?
最佳答案
如上所写,编译器需要一系列以逗号分隔的 Foo
类型的实例。作为 Bar
ctor 的参数, 而它被赋予一个类型 Foo*
的单个实例, 翻译成 Seq[Foo]
幕后。
做这个:
case class Baz(f : Foo*) extends Bar[Foo](f: _*)
这就是重复参数在所有方法之间传递的方式,而不仅仅是 ctors。
下面的也将起作用:
case class Baz(f : Foo*) extends Bar(f: _*)
关于varargs 方法的 Scala 类型边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279868/