igx*_*igx 1 scala pattern-matching
我是使用scala的新手.我试图使用模式匹配与反射:
abstract class Person{
val name:String,
val age:Int
}
case class Man (name:String,age:Int,workPlace:String) extends Person
val aclass = Class.forName("man")
aclass match{
case m:Man => println("this is a man class")
case p:Person => println("Person")
case _ => println("Nothing")
}
Run Code Online (Sandbox Code Playgroud)
我总是得到默认部分("Nothing")和正确的匹配(Man).我究竟做错了什么 ?
谢谢
首先,您需要使用完整且正确套用的类名.其次,Class.forName返回a Class[_],而不是你给它的类的实例.看看我为您的代码所做的修改,以获得更清晰的图片:
abstract class Person {
val name: String //removed comma
val age: Int
}
case class Man(name: String, age: Int, workPlace: String) extends Person
val manClassName = classOf[Man].getName //get the proper name of the class
println("Man class name: %s".format(manClassName))
val aclass = Class.forName(manClassName) //returns Class[Man]
aclass match {
case m: Class[Man] => println("this is a man class") //Pattern match on Class[Man]
case p: Class[Person] => println("Person")
case _ => println("Nothing")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6254 次 |
| 最近记录: |