Scala:具有不同参数类型的反射



我正在尝试使用反射,就像在这个问题的答案中看到的一样。问题是我的代码看起来像这样:

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

有什么好主意吗?

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也可以是原始类型,即Int, Short, Long等,它们不是Java中的对象,因此,如果invoke方法期望Object,则需要编译时保证您提供给该方法的所有内容也将是Object

相关内容

  • 没有找到相关文章

最新更新