This page is no longer maintained — Please continue to the home page atwww.scala-lang.org
In Scala, type parameters and abstract types may be constrained by a type bound. Such type bounds limit the concrete values of the type variables and possibly reveal more information about the members of such types. An upper type bound T <: Adeclares that type variable T refers to a subtype of type A.
Here is an example which relies on an upper type bound for the implementation of the polymorphic method 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 UpperBoundTestextends Application {def findSimilar[T <: Similar](e: T, xs: List[T]): Boolean =if (xs.isEmpty)falseelse if (e.isSimilar(xs.head))trueelse 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))}
Without the upper type bound annotation it would not be possible to call method isSimilar in method findSimilar.
The usage of lower type bounds is discussed here.
Copyright © 2012 École Polytechnique Fédérale de Lausanne (EPFL), Lausanne, Switzerland