如何在Scala中使用反射。我正在尝试使用getDeclaredMethod()

如何在Scala中使用反射。我正在尝试使用getDeclaredMethod(),scala,reflection,Scala,Reflection,如何在Scala中使用反射。我的代码如下所示 这给了我一个错误-error:(28,21)需要类类型,但找到了类[\ux] var arg=new Class[u](classOf[String],classOf[String],classOf[String])示例: class Person1 { def playGame(name: String) = { s"Game is ${name}" } } val clazz = Class.forName("Person1

如何在Scala中使用反射。我的代码如下所示

这给了我一个错误-
error:(28,21)需要类类型,但找到了类[\ux]
var arg=new Class[u](classOf[String],classOf[String],classOf[String])
示例:


class Person1 {
  def playGame(name: String) = {
    s"Game is ${name}"
  }
}

val clazz = Class.forName("Person1")

val s = clazz
      .getDeclaredMethod(s"playGame", classOf[String])
      .invoke(clazz.newInstance(), "John")
      .asInstanceOf[String]

 println("s ==> " + s)


不要使用它。只有在没有其他实用解决方案(通常是设计/类型错误的症状)1时,才应使用运行时反射。
新类[](…)
首先应该做什么
Class
没有可以调用的公共构造函数,并且不能使用占位符类型参数调用构造函数。2
Class.forName
使用当前类的定义类加载器,因此对结果调用
getClassLoader
没有意义;它只是this.getClass.getClassLoader的一个更复杂的版本。

class Person1 {
  def playGame(name: String) = {
    s"Game is ${name}"
  }
}

val clazz = Class.forName("Person1")

val s = clazz
      .getDeclaredMethod(s"playGame", classOf[String])
      .invoke(clazz.newInstance(), "John")
      .asInstanceOf[String]

 println("s ==> " + s)


class Person(name: String, age: Int) {
  def sayHello() = {
    println(s"Hi,I'm ${name},Nice to meet you!")
    }

  def playGame(msg: String) = {
    println(s"Game name is ${name}")
  }

  override def toString: String = {
    s"Name is ${name}, and age is ${age}"
  }
}

object PersonDemo {
  def main(args: Array[String]): Unit = {
    val ju = scala.reflect.runtime.universe

    val mirror = ju.runtimeMirror(getClass.getClassLoader)
    val classPerson = ju.typeOf[Person].typeSymbol.asClass
    val classMirror = mirror.reflectClass(classPerson)

    val constructor = ju.typeOf[Person].decl(ju.termNames.CONSTRUCTOR).asMethod
    val methodMirror = classMirror.reflectConstructor(constructor)
    val p = methodMirror("John",18)
    println(p.toString)

  }
}