栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

CallBack

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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);
  }
});

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/684874.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号