java回调函数这样说,应该明白了吧!

有哥们问我回调怎么用,回调怎么理解?怎么说好呢,只可意会不可言传呐,非也,回调在实际开发中使用频率其实是很高的,恰好我小时候也被回调函数欺负过,竟然问了,那么肯定要好好分享一下我的一些经验.

网传回调的理解
所谓的回调函数就是:在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。

估计看完已经晕在厕所了,可以暂时忽略…

那么从现在开始可以先用我的三要素来理解,之前的可以暂时忘记.
回调我这边总结了有三要素:

  1. 接口: 哪里需要被监听,接口就写在那里.
  2. 引用: 要有引用才可以对被监听者进行设置监听.
  3. 实现: 哪里需要数据/结果,就在那里进行实现

销售卖机器的例子

一个销售向工人订了100台机器准备卖给老外,让工人在生产完100台机器后通知下他.

对于这个需求我们可以用回调监听来处理

我们先缕一缕思路:
在这个需求里,我们用刚刚的三要素定位下.

  1. 哪里需要被监听 -> 工人 (监听工人工作进度)
  2. 哪里需要结果 -> 销售 (得到工人生产的结果)
  3. 对被监听者进行设置监听 -> 销售 (因为结果最终在销售类里获得,因此设置监听要在这里)

我们来看看下面的代码:
工人类需要对生产机器的进去进行监听.

/**
 * 工人类
 * 1. 只要负责生产
 * 2. 生产完之后告诉经理
 * @author relicemxd
 *
 */
public class Worker {
    private WorkListner listner;

  /**
     * 制造机器:
     * 工人特有的方法
     */
    public void makeMachine() {
        int num = 100;
        for (int i = 0; i < num; i++) {
            if (num >= 50) {
                continue;
            }
        }
        // 满足100台机器,通知可以进行下一步操作
        listner.onWorkListner(num);
    }

    /*
     * 监听工人生产情况的接口
     */
    public interface WorkListner {
        //对满足条件后,进行事件操作的方法
        void onWorkListner(int num);
    }

    /**
     * 设置监听工人生产情况的方法
     * @param listner  接扣要在需求方被实现
     */
    public void setOnWorkListner(WorkListner listner) {
        this.listner = listner;
    }
}

上面要对工人的工作情况进行观察,因此WorkListner接口和setOnWorkListner(WorkListner listner)设置监听的方法就写在Worker工人类.

再继续看下面代码:
销售需要设置监听,才知道工人几时才生产完机器.

/**
 * 销售只要负责卖就可以了
 * 
 * @author relicemxd
 *
 */
public class Seller {
    public static void main(String[] args) {
        //1. 销售要卖机器首先要有机器,谁生产机器?  找到工人
        Worker work = new Worker();

        //2. 销售要卖多少台机器?  告诉工人
        work.setOnWorkListner(new WorkListner() {
            @Override
            public void onWorkListner(int num) {
                System.out.println("现在已经生产完成,共 "+num +" 台机器");

                //当工人生产完成后就可以卖机器了
                sell();
            }
        });

        //3. 工人明确要生产多少台机器后就可以开干了.   让工人生产100台机器
        work.makeMachine();
    }


    /**
     * 卖机器:
     * 只有销售才有的方法
     */
    private static void sell() {
        System.out.println("销售开始卖机器给老外了...");
    }
}

要想知道机器的进度情况,那么就肯定要有new Worker()工人对象,此时有了工人的引用,接着要什么需求就吩咐工人(做100台机器)并告之工人做完给反馈work.setOnWorkListner(listner),工人开始按需求做机器了work.makeMachine(),做完后就会进行反馈回调,告之销售可以拿去卖了onWorkListner(int num) { TODO }

如果还有疑惑的继续看android中的常见回调点击事件

我目前所见过的回调都是在一个特定的条件下才发生的方法回调(例如按钮的onClick();最常见)

我先分析下要做实事的是不是对应的activity/fragment或者adapter里,需要被监听观察是否有点击状态的是否就Button.

好我知道来来龙去脉后,用三要素苏通下:

  • 接口: Button
    在源码中可以看到,设置监听的方法写在Button里类,而OnClickListener写在Button的父类View里.
public void setOnClickListener(@Nullable OnClickListener l) {

  if (!isClickable()) {

     setClickable(true);

  }

  getListenerInfo().mOnClickListener = l;

}
  • 实现和引用
    activity里,当点击了button后,我需要打开一个页面MainActivity,因此button的应用和setOnClickListener(listner)方法都写在了这个activity里.
button.setOnClickListener(new OnClickListener() {

@Overridepublic void onClick(View v) {

  mActivity.startActivity(new Intent(mActivity, MainActivity.class));

}});
  • 13
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Java中的回调函数是一种常用的编程模式,它允许一个对象在特定事件发生时通知另一个对象。在Java中,回调函数通常通过接口来实现。引用中给出了一个回调函数接口的示例,它定义了一个名为"callback"的方法。 在引用中,类A实现了回调函数接口,该类的方法"a"中创建了一个类B的实例,并将自己作为参数传递给类B的方法"b"。在类B的方法"b"中,它调用了传入的回调函数对象的"callback"方法。这样,在类B中执行特定的逻辑后,会自动调用类A中实现的回调函数方法。通过这种方式,类A可以在类B的特定事件发生时得到通知并执行相应的逻辑。 总结来Java中的回调函数是一种通过接口实现的机制,允许一个对象在特定事件发生时通知另一个对象执行相应的逻辑。在类A和类B的示例中,类A实现了回调函数接口,类B在特定时刻调用了类A实现的回调函数方法。这种机制可以实现对象之间的解耦和代码的灵活性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [java中的回调函数](https://blog.csdn.net/hejingfang123/article/details/114040323)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值