0

在我处理继承特征的重写函数中使用的棘手协变类型时,我头晕目眩。基本问题是,[?]类型是什么?我找不到一个好的定义(它有点难以理解),因此不清楚为什么 a在以下示例中[T]被替换为:[?]

> sealed trait Bar[+T]
> trait FooT { type Other; def foo[T,V](stuff:Bar[T]*) { stuff.headOption.isDefined } }
> trait TooF extends FooT { override def foo[T,V](stuff:Bar[T]*) { super.foo(stuff) } }
<console>:7: error: type mismatch;
found   : Bar[T]*
required: Bar[?]
   trait TooF extends FooT { override def foo[T,V](stuff:Bar[T]*) { super.foo(stuff) } }
4

1 回答 1

3

我不确定它显示的确切原因,Bar[?]但我认为可能还没有解决类型参数之类的问题。真正的问题是您将可变参数传递给 super 方法的语法不正确。它应该是

override def foo[T,V](stuff:Bar[T]*) { super.foo(stuff:_*) }
于 2012-05-14T16:51:09.357 回答