Quiero comprobar el tipo de los parámetros de un método, pero no sé la mejor manera de hacer esto. Ver mi código:¿Cómo se empareja la clase [X] para diferentes X?
class X {
def x(a: Int, b: String) {}
}
val methods = classOf[X].getDeclaredMethods
methods map { m =>
m.getParameterTypes.toList map { t =>
println(t.getName)
// I don't know how to write the following
if (the type of t is Int) { do something}
else if(the type of t is String) { do something}
else { }
}
}
Tenga en cuenta el comentario en el código. No sé cómo verificar los tipos de forma scala.
que he probado:
t match {
case _:String => println("### is a string")
case _:Int => println("### is an int")
case _ => println("### ?")
}
Pero no se puede compilar.
puedo usar java-manera de comprobar:
if (t.isAssignableFrom(classOf[String])) // do something
else if(t.isAssignableFrom(classOf[Int])) // do something
else {}
Parece que deberíamos utilizarlo en Scala, ¿verdad?
ACTUALIZACIÓN:
Si quiero usar match
, que debería escribir así:
t match {
case i if i.isAssignableFrom(classOf[Int]) => println("### is an Int")
case s if s.isAssignableFrom(classOf[String]) => println("### is a String")
case _ => println("###?")
}
¿Es la mejor respuesta?
¿Qué quiere decir con '+>' en la última línea? – Andrey
'+>' es probablemente un error tipográfico y debería leer '=>' – michid
Es un error tipográfico, acabo arreglé. Gracias. – Freewind