如何在Scala中使用反射。我正在尝试使用getDeclaredMethod()
如何在Scala中使用反射。我的代码如下所示 这给了我一个错误-如何在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
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
没有可以调用的公共构造函数,并且不能使用占位符类型参数调用构造函数。2Class.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)
}
}