资讯专栏INFORMATION COLUMN

java接口回调理解

Rainie / 3465人阅读

摘要:下面说的是接口回调的理解,比较常用什么是回调函数有些库函数要求应用先传给它一个函数,在合适的时候调用,以完成目标任务。

接口回调机制
网上有一篇挺形象的例子 https://www.cnblogs.com/heshu...
java中的回调我认为分为,同步回调,异步回调
回调:其实就是,A调用B,B也调用A,
同步回调:就是一种阻塞调用,A调用B的方法,等待B执行完,A才继续
异步回调:类似打电话,A告诉B一声,然后A,B 各自干各自的事情。
异步回调又可以是多线程,也可以是接口,我都按照异步来理解了。下面说的是接口回调的理解,比较常用
1、什么是回调函数
有些库函数(library function)要求应用先传给它一个函数,在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)

就是:我找你帮忙help做一件事,我把做完应该干啥的方法do()传给你,,然后我调用请求你help()方法,告诉你开始做吧,然后你做了一堆,最后做完了应该怎么办,就是调用do();

2、上面链接中例子的理解
上文中的接口回调,理解为异步回调,就是我想完成一件事,我不用自己做,我告诉别人一下,让他去做,我自己可以去做别的事。

约定接口,计算完要做的事----这里就是填写结果,具体填写谁的? 填什么?怎么填,都是传过来的。。。 谁要找我帮忙,你得给我传个你得权限和信息,比如(我帮你填写结果,你告诉我怎么填,就是接口中这个方法,方法的具体实现规则是由 对方来完成)

public interface doJob
{
     public void fillBlank(int a, int b, int result);
}

计算方法,根据传过来的值和对象,计算,计算完并根据约定,调用接口的方法做操作。

public class SuperCalculator
{
    public void add(int a, int b, doJob  customer)
    {
        int result = a + b;
        customer.fillBlank(a, b, result);
    }
}

学生,找人帮忙计算,把数值 和 约定的实现方法传过去,告诉他,这几个数,你给我计算,计算完按照我的方法给我填了

public class Student
{
    private String name = null;
 
    public Student(String name)
    {
        // TODO Auto-generated constructor stub
        this.name = name;
    }
 
    public void setName(String name)
    {
        this.name = name;
    }
 
    public class doHomeWork implements doJob
    {
 
        @Override
        public void fillBlank(int a, int b, int result)
        {
            // TODO Auto-generated method stub
            System.out.println(name + "求助小红计算:" + a + " + " + b + " = " + result);
        }
 
    }
 
    public void callHelp (int a, int b)
    {
        new SuperCalculator().add(a, b, new doHomeWork());
    }
}

小贩,找人帮忙,告诉你数值和,具体计算完应该怎么写的方法,计算完按照这个方法帮我填了

public class Seller
{
    private String name = null;
 
    public Seller(String name)
    {
        // TODO Auto-generated constructor stub
        this.name = name;
    }
 
    public void setName(String name)
    {
        this.name = name;
    }
 
    public class doHomeWork implements doJob
    {
 
        @Override
        public void fillBlank(int a, int b, int result)
        {
            // TODO Auto-generated method stub
            System.out.println(name + "求助小红算账:" + a + " + " + b + " = " + result + "元");
        }
 
    }
 
    public void callHelp (int a, int b)
    {
        new SuperCalculator().add(a, b, new doHomeWork());
    }
}
public class Test
{
    public static void main(String[] args)
    {
        int a = 56;
        int b = 31;
        int c = 26497;
        int d = 11256;
        Student s1 = new Student("小明");
        Seller s2 = new Seller("老婆婆");
 
        s1.callHelp(a, b);
        s2.callHelp(c, d);
    }
}

所谓回调,就是a调b,b也会调a
最后的结果是: 学生给了你数值,和怎么填写,,然后你计算完,用学生的对象调用了下方法,把数值传进去,填写。这是所谓的回调,具体我怎么填写的,这个方法时学生是写约定接口自己实现的,他传过来了,告诉你了,所以调用方法以后,按照你传入的数值做了回调,实现了学生约定的操作。

3、android中接口回调的使用和理解

举个例子:比如recyclerview 的点击事件,,如果我想在外层做点击事件,这个时候就必须拿到点击的id.但是 recyclerview的点击事件实在 adapter中实现的。。所以可以用接口回调来实现,把点击位置回调返回,在外层做操作。。

但是我们可以这样理解:我要在外层做点击事件,但我做不了,怎么办?我请求内层帮我做,我告诉他我点击了要做啥就行了。这样我属于异步回调,我就是告诉你一声,然后我就该干嘛干嘛去了。

1、请求帮助,需要一个帮助方法让我来调用,我要传值为(我要点击后做的事,传一个对象过去)
2、所以这就需要定义一个接口,约定好方法,然后再内层创建这个帮助方法
3、然后就是内层按照我的要求,去做相应的点击事件了。

所以,接下来我们一步步的去实现:

1、约定一个接口(实现一个点击方法,具体怎么实现由外层决定,完成后传过来)
public  interface  onMyClick{
         void  setMyclick(int position);
         //有个位置参数,是因为外层实现这个方法规则的时候要用到
    }
2、adapter中定义一个 设置监听的方法让外层调用
   //声明onMyclick对象是因为接下来,外层调用了这个方法我要用传过来的onMyClick去做操作,去调用setMyclick(),来实现定义的具体操作
 onMyClick onMyClick;
 public void  setOnMyClick(onMyClick onMyClick){
        this.onMyClick =onMyClick;
    }
3、外部调用监听方法,传入操作规则,也就是实现定义的接口方法的具体
adapter.setOnMyClick(new MyAdapter.onMyClick() {
            @Override
            public void setMyclick(int position) {
                Log.d("测试","接口回调");
            }
        });
4、adapter内部点击事件的监听
holder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d("测试","正常点击事件");

                if (onMyClick!=null){
                    onMyClick.setMyclick(position);
                }
            }
        });

注意:上面的顺序是我按照理解的过程写的,写的时候顺序不一定是这样。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68729.html

相关文章

  • Java回调机制解读

    摘要:异步调用异步调用是为了解决同步调用可能出现阻塞,导致整个流程卡住而产生的一种调用方式。回调是一种思想是一种机制,至于具体如何实现,如何通过代码将回调实现得优雅实现得可扩展性比较高,一看开发者的个人水平,二看开发者对业务的理解程度。 模块间调用在一个应用系统中,无论使用何种语言开发,必然存在模块之间的调用,调用的方式分为几种: (1)同步调用 showImg(https://segmen...

    Hancock_Xu 评论0 收藏0
  • java接口回调

    摘要:回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口,例如要调用,在执行完又要调用。详细的代码如下创建一个回调接口创建回调接口的实现类,此例中,员工干完活后还要干什么事情是老板说了算的。 什么是回调? 如上一篇文章所说,从调用方式上看,可以分为三类同步调用、异步调用和回调。回调是一种双向的调用模式,也就是说,被调用的接口被调用时也会调用对方的接口,例如A要调用B,...

    Coly 评论0 收藏0
  • java回调函数-异步回调-简明讲解

    摘要:回调函数异步回调简明讲解叙言异步回调常用于某些业务需要很长时间处理,但是又需要立刻返回结果,这种情况都需要开辟线程独立处理需要长时间多的业务,也无处理完了,回调回调函数,再去处理与之有关的需要在该业务之后处理的业务。 java回调函数-异步回调-简明讲解 叙言: 异步回调常用于某些业务需要很长时间处理,但是又需要立刻返回结果,这种情况都需要开辟线程独立处理需要长时间多的业务,也无处理...

    Simon_Zhou 评论0 收藏0
  • 金三银四,2019大厂Android高级工程师面试题整理

    摘要:原文地址游客前言金三银四,很多同学心里大概都准备着年后找工作或者跳槽。最近有很多同学都在交流群里求大厂面试题。 最近整理了一波面试题,包括安卓JAVA方面的,目前大厂还是以安卓源码,算法,以及数据结构为主,有一些中小型公司也会问到混合开发的知识,至于我为什么倾向于混合开发,我的一句话就是走上编程之路,将来你要学不仅仅是这些,丰富自己方能与世接轨,做好全栈的装备。 原文地址:游客kutd...

    tracymac7 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<