Any
es el supertipo de todos los tipos, también llamado tipo superior. Define ciertos métodos universales como equals
, hashCode
y toString
. Any
tiene dos subclases directas: AnyVal
y AnyRef
.
AnyVal
representa tipos de valores. Hay nueve tipos de valores predefinidos y no aceptan valores NULL
: Double
, Float
, Long
, Int
, Short
, Byte
, Char
, Unit
y Boolean
. Unit
es un tipo de valor que no contiene información significativa. Hay exactamente una instancia de Unit
que puede declararse literalmente así: ().
Todas las funciones deben devolver algo, por lo que a veces Unit
es un tipo de devolución útil.
AnyRef
representa tipos de referencia. Todos los tipos sin valor se definen como tipos de referencia. Cada tipo definido por el usuario en Scala es un subtipo de AnyRef
. Si Scala se usa en el contexto de un entorno de tiempo de ejecución de Java, AnyRef
corresponde a java.lang.Object.
Aquí hay un ejemplo que demuestra que las cadenas, los números enteros, los caracteres, los valores booleanos y las funciones son todos del tipo Any como cualquier otro objeto:
val list: List[Any] = List(
"a string",
732, // an integer
'c', // a character
true, // a boolean value
() => "an anonymous function returning a string"
)
list.foreach(element => println(element))
Define una lista de valores de tipo List[Any]
. La lista se inicializa con elementos de varios tipos, pero cada uno es una instancia de scala.Any
, por lo que puede agregarlos a la lista.
Aquí está la salida del programa:
a string
732
c
true
<function>
Nothing and Null
Nothing
es un subtipo de todos los tipos, también llamado tipo inferior. No hay ningún valor que tenga el tipo Nothing
. Un uso común es señalar la no terminación, como una excepción lanzada, la salida del programa o un bucle infinito (es decir, es el tipo de una expresión que no se evalúa como un valor o un método que no regresa normalmente).
Null
es un subtipo de todos los tipos de referencia (es decir, cualquier subtipo de AnyRef
). Tiene un único valor identificado por la palabra clave literal null
. Null
se proporciona principalmente para la interoperabilidad con otros lenguajes JVM y casi nunca debe usarse en código Scala.