在js中,因为js是单线程,所以在js中操作中,经常使用回调函数实现程序的异步执行, 从而解决代码串行导致线程阻塞的问题,或者类似map/filter等函数 - 将一个函数作用到数组的每个元素上.
如下这样:
|
|
调用如:
|
|
这段代码简单的模仿了javascript高阶函数map
, 循环处理每一个Entry
, 在js中能这么使用得益于javaScript中函数有多样化的表达方式, 函数可以是一个对象,也可以是一个函数表达式, 在上面我们可以将一个函数当做一个形参传递给函数dosomth
. 在java中是没办法做到这一点的, 因为在java中,一切皆对象, 所以成员都需要依附在某个对象上, 所以,如果想实现类似上述回调的机制, 可以从java的代理模式上找到灵感.
先定义一个回调函数
接口:
然后,定义使用这个回调函数的抽象业务类
, 如:
然后定义具体的业务类,如:
运行test.main
可以看到输出:
在这段代码中,其实就是将js中的函数表达式引用变为java对象引用持有,然后调用指定方法或函数实现业务功能. 这其实和代理模式一样一样的. 都是将具体的业务处理逻辑委托给另一个对象来完成.
以上就是我对代理和java版回调
的理解,请指正! thx ~~