Scala:使用不同参数类型的反射

时间:2016-08-14 13:12:02

标签: scala reflection

我正在尝试使用反射,几乎与this question的答案中看到的相同。问题是我的代码看起来像这样:

class A {
  def query1(arg: Int): String = { Some code }
  def query2(arg: String): String = { Some code }
  def query3(): String = { Some code }
}

object A {
  def apply(query: String, arg: Any): String = {
    val a = new A
    val method = a.getClass.getMethod(query,arg.getClass)
    method.invoke(a,arg)
  }
}

但这无法编译,我收到错误:

type mismatch; found: Any, required: Object

任何想法我如何才能使这项工作?

1 个答案:

答案 0 :(得分:2)

object A {
  def apply(query: String, arg: AnyRef): String = {
    val a = new A
    val method = a.getClass.getMethod(query, arg.getClass)
    method.invoke(a, arg).toString
  }
}

这里的问题是Any也可以是基本类型,即IntShortLong等等,它们不是Java中的对象,因此,如果invoke方法需要Object,则需要编译时保证您提供给该方法的所有内容也将是Object