CallBack

CallBack,第1张

CallBack


回调函数实际上就是在调用某个函数(通常是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);
  }
});

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5685423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存