Я хочу проверить тип параметров метода, но не знаю, как это сделать лучше всего. См. Мой код:
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("###?")
}
Это лучший ответ?