axe*_*l22 15
不.查看方法和功能之间的区别.方法不作为参数传递 - 它们在传递给其他方法/函数时被扩展为函数对象.这些函数对象是匿名的,编译器生成的类的实例,并且没有名称(或者,至少是匿名类,有一些可以使用反射访问的错误名称,但可能不需要).
所以,当你这样做时:
def foo() {}
def bar(f: () => Unit) {}
bar(foo)
Run Code Online (Sandbox Code Playgroud)
在最后一次通话中实际发生的事情是:
bar(() => foo())
Run Code Online (Sandbox Code Playgroud)
但理论上,您可以找到正在传递的函数对象的包装方法的名称.您可以进行字节码自省来分析上述apply方法中函数对象f方法的主体bar,并根据方法的名称得出结论.然而,这既是近似也是过度杀伤.
| 归档时间: |
|
| 查看次数: |
4937 次 |
| 最近记录: |