Coursera のコースでMartin Odesrky 教授は、ポリモーフィズムとパラメータ化されたクラスに関する講義の例として、連結リストを使用しています。
package week4
trait List[T] {
def isEmpty: Boolean
def head: T
def tail: List[T]
}
class Cons[T](val head: T, val tail: List[T]) extends List[T] {
def isEmpty = false
}
class Nil[T] extends List[T] {
def isEmpty = true
def head = throw new NoSuchElementException("Nil.head")
def tail = throw new NoSuchElementException("Nil.tail")
}
object Main extends App {
def main(args: Array[String]) {
val lst = new Cons("A", new Cons("B", new Cons("C", new Nil())))
}
}
気になるのは、最後の行でのクラス Nil のインスタンス化ですnew Nil()
。
object
Nil をScala クラスではなくとして定義し、パラメータ化された型 List[T] に準拠させるにはどうすればよいでしょうか?
次のコード行のようにオブジェクト Nil を参照し (インスタンス化なし)、正しい型にしたいと思います。
new Cons("A", new Cons("B", new Cons("C", Nil)))