回调函数实际上就是在调用某个函数(通常是API函数)时,将自己的一个函数(这个函数为回调函数)的地址作为参数传递给那个函数。而那个函数在需要的时候,利用传递的地址调用回调函数,这时你可以利用这个机会在回调函数中处理消息或完成一定的 *** 作。
简单来说就是执行一个调用方法。
案例:https://www.cnblogs.com/sunfie/p/5259340.html
回到源码:
java中CallBack本身就是一个没有任何方法的接口。callback是一种概念,java中之所以要借助接口,是因为不像类c语言可以借助指针实现。
jdk对CallBack的注释中有阐明用意,同时这里我们可以注意jdk有实现几类CallBack。同时有一个CallBackHandler值得我们注意,这个类提供了我们去处理CallBack的一个模板。
其中提供了一个handler()方法供我们重写实现我们的具体业务逻辑,在jdk注释中也提供了我们案例。
⭐⭐⭐⭐⭐
callback结合异步的使用,确实能为我们带来性能上的优化,但是如果业务逻辑稍微复杂就会造成回调地狱(callback hell)
考虑这样一种情景:在用户界面上显示用户的5个收藏,或者如果没有任何收藏提供5个建议。这需要3个 服务(一个提供收藏的ID列表,第二个服务获取收藏内容,第三个提供建议内容):
userService.getFavorites(userId, new Callback>() { public void onSuccess(List
list) { if (list.isEmpty()) { suggestionService.getSuggestions(new Callback >() { public void onSuccess(List
list) { UiUtils.submitOnUiThread(() -> { list.stream() .limit(5) .forEach(uiList::show); }); } public void onError(Throwable error) { UiUtils.errorPopup(error); } }); } else { list.stream() .limit(5) .forEach(favId -> favoriteService.getDetails(favId, new Callback () { public void onSuccess(Favorite details) { UiUtils.submitOnUiThread(() -> uiList.show(details)); } public void onError(Throwable error) { UiUtils.errorPopup(error); } } )); } } public void onError(Throwable error) { UiUtils.errorPopup(error); } });
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)