Как использовать отражение в Scala. Я пытаюсь использовать getDeclaredMethod () - PullRequest
0 голосов
/ 23 января 2020

Как использовать отражение в Scala. Мой код выглядит следующим образом:

Нажмите здесь, чтобы посмотреть скриншот кода

val arg = new Class[_](classOf[String], classOf[String], classOf[String])
val child = Class.forName("GenerateJSON").getClassLoader.getClass.getDeclaredMethod(function_name,arg).invoke(null,matcher1.group().replace("%",""),customfield,value)

Это дает мне ошибку - Error:(28, 21) class type required but Class[_] found var arg = new Class[_](classOf[String],classOf[String],classOf[String])

1 Ответ

1 голос
/ 23 января 2020

Пример:


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)

  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...