Как сопоставить класс [X] по образцу для разных 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 { }
    }
}

Обратите внимание на комментарий в коде. Я не знаю, как проверять типы с помощью 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("###?")
}

Это лучший ответ?

8
задан Freewind 4 March 2011 в 09:13
поделиться