Scala ひと巡り : 上限 型境界 (Upper Type Bounds)

原ページ

Scala では、型パラメータ [16]と抽象型 [21]は、型境界による制約を受けます。そのような型境界は、型変数の具象値を制限し、型のメンバーについてさらに多くの情報を明らかにします。上限型境界 T <: A は、型変数 T が型 A のサブ型を参照することを宣言します。

次は、多相的メソッド [25] findSimilar の実装について、上限型境界に頼る例です:

trait Similar { def isSimilar(x: Any): Boolean } case class MyInt(x: Int) extends Similar { def isSimilar(m: Any): Boolean = m.isInstanceOf[MyInt] && m.asInstanceOf[MyInt].x == x } object UpperBoundTest extends Application { def findSimilar[T <: Similar](e: T, xs: List[T]): Boolean = if (xs.isEmpty) false else if (e.isSimilar(xs.head)) true else findSimilar[T](e, xs.tail) val list: List[MyInt] = List(MyInt(1), MyInt(2), MyInt(3)) println(findSimilar[MyInt](MyInt(4), list)) println(findSimilar[MyInt](MyInt(2), list)) }

上限型境界アノテーションがなければ、メソッド findSimilar 中でメソッド isSimilar を呼び出すことはできません。

下限型境界の使用方法は、次で述べます [19]