回调函数实际上就是在调用某个函数(通常是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<List<String>>() {
public void onSuccess(List<String> list) {
if (list.isEmpty()) {
suggestionService.getSuggestions(new Callback<List<Favorite>>() {
public void onSuccess(List<Favorite> 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<Favorite>() {
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);
}
});