Encuentra el tipo de variable en Scala
- Utilice la coincidencia de patrones en Scala
-
Utilice el método
getClass
en Scala -
Usar
Manifiesto
en Scala
Este artículo enseñará cómo encontrar el tipo de variable en Scala. Veamos diferentes métodos para obtener el tipo de una variable en Scala en tiempo de ejecución.
Utilice la coincidencia de patrones en Scala
El tipo de variable siempre está presente en Scala y podemos pasarlo como parámetro.
Ejemplo:
def fun[T](data : T) = data
val x = 10
fun(x)
En el ejemplo anterior, podemos ver que T
es int
, que es el tipo de x
. Pero para obtener el tipo de una variable en tiempo de ejecución como int
, string
, double
, etc., podemos modificar el código anterior.
Código de ejemplo:
object MyClass {
def fun[T](data:T)= data match{
case _:Int => "Int"
case _:Double => "Double"
case _:String => "String"
case _ => "Undefined"
}
def main(args: Array[String]) {
val x = 5.6
val y = "hero"
val z = 234
println(fun(x))
println(fun(y))
println(fun(z))
}
}
Producción :
Double
String
Int
Utilice el método getClass
en Scala
El método getClass
en Scala se usa para obtener la clase del objeto Scala. Podemos usar este método para obtener el tipo de una variable.
Código de ejemplo uno:
object MyClass {
def main(args: Array[String])
{
val x = 123;
System.out.println(x.getClass)
val y = "hero"
System.out.println(y.getClass)
val z = 34.56
System.out.println(z.getClass)
}
}
Producción :
int
class java.lang.String
double
El resultado anterior muestra que imprime java.lang.String
cuando se trata de cadenas porque la cadena Scala no es más que un envoltorio
alrededor de java.lang.String
.
Entonces, en lugar de java.lang.String
, si queremos una String
con una salida más significativa, podemos usar getSimpleName
y el método getClass
.
Código de ejemplo dos:
object MyClass {
def main(args: Array[String])
{
val y = "hero"
System.out.println(y.getClass.getSimpleName)
}
}
Producción :
String
Usar Manifiesto
en Scala
Manifest
es una característica de Scala; usar esto en el compilador en tiempo de ejecución puede obtener la información de tipo genérica
. En Scala, podemos crear instancias con un parámetro de tipo, por ejemplo, def fun[T](data:T)= data
; aquí, T
es el parámetro de tipo.
Entonces, al crear un objeto de tipo Manifest[T]
, podemos obtener información completa sobre el tipo T
.
Código de ejemplo:
object MyClass {
def myFunc[T: Manifest](t: T): Manifest[T] = manifest[T]
def main(args: Array[String])
{
val y =123
println(myFunc(y))
}
}
Producción :
Int
Una de las principales ventajas de usar Manifiesto
es encontrar el tipo de tipos no primitivos, como si una variable es una Lista
o una Secuencia
, etc.
Código de ejemplo dos:
object MyClass {
def myFunc[T: Manifest](t: T): Manifest[T] = manifest[T]
def main(args: Array[String])
{
val y = List(1,2,3,4)
val z = Seq("apple","mango")
println(myFunc(y))
println(myFunc(z))
}
}
Producción :
scala.collection.immutable.List[Int]
scala.collection.immutable.Seq[java.lang.String]