scala Class.forName模式匹配

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).我究竟做错了什么 ?

谢谢

Noa*_*oah 7

首先,您需要使用完整且正确套用的类名.其次,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)