Tour of Scala

Límite de tipado superior

Language

En Scala, los parámetros de tipo y los tipos abstractos pueden ser restringidos por un límite de tipado. Tales límites de tipado limitan los valores concretos de las variables de tipo y posiblemente revelan más información acerca de los miembros de tales tipos. Un límite de tipado superior T <: A declara que la variable de tipo T es un subtipo del tipo A. Aquí se muestra un ejemplo el cual se basa en un límite de tipado superior para la implementación del método polimórfico 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 App {
  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))
}

Sin la anotación del límite de tipado superior no sería posible llamar al método isSimilar en el método findSimilar. El uso de los límites de tipado inferiores se discute aquí.

Contributors to this page: