我正在尝试使用反射,几乎与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
任何想法我如何才能使这项工作?
答案 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
也可以是基本类型,即Int
,Short
,Long
等等,它们不是Java中的对象,因此,如果invoke
方法需要Object
,则需要编译时保证您提供给该方法的所有内容也将是Object