参考在对象内定义的函数

时间:2015-11-26 08:19:20

标签: scala reflection

如何获取def内定义的object的参考。

object SomeObject {
  def someMethod(x: String): String = s"Hello $x"
}

我想参考someMethod函数。

到目前为止我尝试了什么:

val method = SomeObject.getClass.getDeclaredMethods.head
val function = method _

但这会返回() => java.lang.reflect.Method = <function0>而不是(String) => (String) = <function1>

修改 我不知道这里的方法名称,首先我需要检索所有方法名称,然后获取它们的参考。为简单起见,我在SomeObject中仅使用了一种方法。

TIA

3 个答案:

答案 0 :(得分:1)

直接做吧

object SomeObject {
  def someMethod(x: String): String = s"Hello $x"
}
val f = SomeObject.someMethod _       //> f  : String => String = <function1>
f("World")                            //> res0: String = Hello World

答案 1 :(得分:1)

好吧,如果你有一个Method对象并且你知道它对应的方法有1个参数,你只需要写method.invoke(SomeObject, _)method.invoke(SomeObject, _, _) 2个参数,依此类推)。请注意,您将获得一个Object => Object函数,除了String而不是String => String之外,它会传递异常。

答案 2 :(得分:0)

你可以用这个: val function = method.invoke(SomeObject, _: String)