我有一个问题我无法自己回答,老实说也不知道该怎么称呼它。
让我告诉你我的代码:
class Collection[+A](sorting: SortableCollection, contains: A*) {
var sorter: SortableCollection = new SwapSorter()
def add[B >: A](item: B): Collection[B] = {
new Collection(sorter, (contains :+ item): _*)
}
def sort() = { sorter.sort(this) }
def getContains(): Seq[A] = {
contains
}
}
trait SortableCollection {
def sort[A](c: Collection[A]): Collection[A]
}
class SwapSorter extends SortableCollection {
def sort[A](c: Collection[A]): Collection[A] = {
def order(): Seq[A] = {
val seqnew: Seq[A] = c.getContains()
seqnew.reverse
}
new Collection[A](this, order(): _*)
}
}
在eclipse中,我尝试在Scala解释器中定义这些类,它会告诉我:
error: type mismatch;
found : SwapSorter
required: SortableCollection
new Collection[A](this, order(): _*)
尽管SwapSorter
是SortableCollection
的子类型。
这是由于论证的逆转吗?我将如何解决这个问题,因为我无法实例化一个新的SortableCollection
。
我在Collection[A]
处使用sort方法遇到了同样的问题。
error: type mismatch;
found : Collection[A]
required: Collection[?]