型パラメータ

1.型パラメータ(type parameter)

型パラメータとは、classやtraitで特定の型に縛られる事無く、より抽象的に定義をできるようにする事です。これまでの例で出てきているCollection クラスで、Listがあります。このListも型パラメター化されており、利用する際の宣言時に型(Int、String etc)を指定することができます。

val intList:List[Int] = List(1,2,3)
val strList:List[String] = List("あい","うえ","お")
case class MyClass(name:String, value:Int)
val myList:List[MyClass] = List(MyClass("ラジオ",1000),MyClass("テレビ",999))

『[』と『]』の括弧でくくられている部分が型パラメータとなります。
Javaで言うところのジェネリクスです(『<』と『>』)。

配列の要素アクセスには『(』と『)』で指定できるため、[ ] にて型パラメータが指定できます。
このように型指定する事で、キャスト(型の変換)を考える必要が無く、コンパイル時に型チェックがしっかり入ることになります。

// こんな感じで、独自に型パラメータを指定可能
// 『[』と『]』で指定した3つの型パラメータで、case クラスの biko、yobi1、yobi2を後から型指定できます。
case class MyClass[T,U,V](name:String, value:Int, biko:T, yobi1:U,yobi2:V)

2. 共変・反変・非変

最初のListの例で示した内容では、宣言時の型 及びその型のサブクラスも指定可能です。 このような定義の事を共変(convariant)と呼びます。

List[+T] // ヘルプとかでは『+』が型定義(T)の横についている