我有以下基类:
trait Foo
abstract class Bar[A <: Foo](f : A*) extends Foo
我想创建一个子类:
case class Baz(f : Foo*) extends Bar(f)
但是,当我这样做时,编译器会感到沮丧,告诉我:
推断类型参数[Seq [Foo]]不符合类Bar的类型参数界限[A&lt ;:Foo]
向Bar添加显式类型参数,如
case class Baz(f : Foo*) extends Bar[Foo](f)
然后抱怨类型不匹配 - 当需要Foo时发现Foo *。
造成这种情况的原因是什么?我应该如何解决它?
答案 0 :(得分:7)
如上所述,编译器需要一组类型为Foo
的逗号分隔的实例作为Bar
的ctor的参数,而它被赋予类型为Foo*
的单个实例。 ,被翻译为幕后的Seq[Foo]
。
这样做:
case class Baz(f : Foo*) extends Bar[Foo](f: _*)
这是在所有方法之间传递重复参数的方式,而不仅仅是ctors。 然后,以下内容也将起作用:
case class Baz(f : Foo*) extends Bar(f: _*)