Trait GenericLinkedList,案例类Cons和案例对象Nil的创建如下。
问题是我想使用这个genericLinkedList,但是正如你所知,当我们编写这段代码var list = new GenericLinkedList
时,它不会导致Traits无法创建任何对象,对吧?我想创建一个扩展GenericLinkedList的类,但我不能。我该如何解决?
trait GenericLinkedList [+T] {
def prepend[TT >: T](x: TT): GenericLinkedList[TT] = this match {
case _ => Cons(x,this)
}
}
case class Cons[+T](head: T,tail: GenericLinkedList[T]) extends GenericLinkedList[T]
case object Nil extends GenericLinkedList[Nothing]
答案 0 :(得分:1)
你的问题似乎无法做到
val list = new GenericLinkedList
你的目标是创建一个空列表吗?
你可以做到
val list = new GenericLinkedList[Int] { }
因为特征不是抽象的,但它并不漂亮。您也可以为特征定义伴随对象
object GenericLinkedList {
def apply[T](): GenericLinkedList[T] = Nil
}
并使用它以这种方式初始化一个空列表
scala> val x = GenericLinkedList[Int]()
// x: GenericLinkedList[Int] = Nil
scala> x.prepend(42)
// res0: GenericLinkedList[Int] = Cons(42,Nil)
顺便说一下,match
实现中的通用prepend
是无用的。你可以做到
def prepend[TT >: T](x: TT): GenericLinkedList[TT] = Cons(x, this)