2010-11-25 109 views
3

我有以下的基类:斯卡拉类型界限的可变参数方法

trait Foo 
abstract class Bar[A <: Foo](f : A*) extends Foo 

我想,然后创建一个子类:

case class Baz(f : Foo*) extends Bar(f) 

然而,当我做这个编译器得到不高兴,告诉我说:

推断类型参数[序列[美孚]不符合Bar类的类型参数界限[A <:美孚]

添加一个显式类型参数酒吧,在

case class Baz(f : Foo*) extends Bar[Foo](f) 

然后抱怨类型不匹配的 - 发现富*需要时富。

这是什么造成的?我应该如何解决它?

回答

7

书面如上,编译器期望作为参数的Bar构造函数Foo类型的彗分隔实例的序列,而报错Foo*类型,它被转换为场景后面的Seq[Foo]的单个实例它。

这样做:

case class Baz(f : Foo*) extends Bar[Foo](f: _*) 

这是怎么重复参数都是方法,而不是构建函数之间传来传去。 然后下面将工作以及:

case class Baz(f : Foo*) extends Bar(f: _*) 
+0

作品一种享受!谢谢。 – Submonoid 2010-11-25 18:28:58