[Scala]パラメータ化された型について(<:とか)
クラスに型パラメータを追加
class クラス名[型パラメーター, …]
定義例
class Sample[T] { protected var t: T = _ def set(in: T): Unit = { this.t = in } def get(): T = { t } }
使い方
val s = new Sample[String] s.set("abc") val v = s.get()
型パラメーターの境界(<:とか>:とか)
クラスの定義と継承が以下のような状態の場合に
class A1 class A2 extends A1 class A3 extends A2
型パラメータで
class Sample[T <: A2]
とすると
new Samle[Any] //=> × new Samle[A1] //=> × new Samle[A2] //=> ○ new Samle[A3] //=> ○ new Samle[Nothing] //=> ○
逆に
class Sample[T >: A2]
とすると
new Samle[Any] //=> ○ new Samle[A1] //=> ○ new Samle[A2] //=> ○ new Samle[A3] //=> × new Samle[Nothing] //=> ×
となる
上限と下限を両方指定も出来る
class Sample[T >: A3 <: A1]
この場合は
new Samle[Any] //=> × new Samle[A1] //=> ○ new Samle[A2] //=> ○ new Samle[A3] //=> ○ new Samle[Nothing] //=> ×