Я хочу проверить тип параметров метода, но я не знаю лучший способ сделать это.Смотрите мой код:
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 { }
}
}
Пожалуйста, обратите внимание на комментарий в коде.Я не знаю, как проверить типы в стиле scala.
Я пробовал:
t match {
case _:String => println("### is a string")
case _:Int => println("### is an int")
case _ => println("### ?")
}
Но это не может быть скомпилировано.
Я могуиспользуйте Java-способ для проверки:
if (t.isAssignableFrom(classOf[String])) // do something
else if(t.isAssignableFrom(classOf[Int])) // do something
else {}
Кажется, мы должны использовать его в Scala, верно?
ОБНОВЛЕНИЕ:
Если я хочу использовать match
, я должен написать так:
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("###?")
}
Это лучший ответ?