我正在尝试使用反射,就像在这个问题的答案中看到的一样。问题是我的代码看起来像这样:
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