我们知道,在Scala反射中,我们可以使用
调用方法clazz.getDeclaredMethod("method").invoke(instance, parameters)
,其中invoke
的函数签名为Object invoke(Object obj, Object... args)
。
如果我们想为上面的函数创建一个只有一个参数的匿名函数,我们可以写为
val method: Function1[Object, Object] = clazz.getDeclaredMethod("method").invoke(instance, _)
我的问题是,如何使一个匿名函数没有参数?
简单地编写clazz.getDeclaredMethod("method").invoke(instance)
将不带任何参数地调用该方法,而不是将其作为一个匿名函数。
_
语法首先是糖,与
val method: Function1[Object, Object] = x => clazz.getDeclaredMethod("method").invoke(instance, x)
为了编写不带参数的类似函数:
val method: Function0[Object] = () => clazz.getDeclaredMethod("method").invoke(instance)