有哥们问我回调怎么用,回调怎么理解?

怎么说好呢,仅仅可意会不可言传呐,非也,回调在实际开发中使用频率事实上是非常高的,恰好我小时候也被回调函数欺负过,居然问了,那么肯定要好好分享一下我的一些经验.

网传回调的理解

所谓的回调函数就是:在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() {

@Override

public void onClick(View v) {

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

}});

java回调函数这样说,应该明确了吧!的更多相关文章

  1. Java 回调函数

    下面使用java回调函数来实现一个测试函数运行时间的工具类: 如果我们要测试一个类的方法的执行时间,通常我们会这样做: public class TestObject { /** * 一个用来被测试的 ...

  2. java回调函数,看完就懂

    java回调函数在网上了看了些例子,比较绕,不够清晰,自己写的一个例子比较通俗,java回调其实很简单. 举个例子我是类B,我有个方法叫b(),现在我要调用类A中的方法a(),写个代码就是: publ ...

  3. Java回调函数的理解与实现

    回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 在Java里面,我们使用接口来实现回调.举个例子 所谓的回调,就是程序员 ...

  4. Java回调函数

    维基百科上的定义:在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序. 所谓回调,就是客户程序C调用服务程 ...

  5. 转Java 回调函数的理解

    所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数.一般说来,C ...

  6. JAVA回调函数ANDROID中典型的回调地方

    在计算机中回调函数是指通过函数参数传递到其他代码类的,某一块可执行代码的引用,这以设计允许了底层代码调用者在高层定义的子程序. 在JAVA里面我们使用接口的方式来实现函数的回调. 回调的通俗就是:程序 ...

  7. Java回调函数的理解

    所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数.例如Win32下的窗口过程函数就是一个典型的回调函数.一般说来,C ...

  8. java回调函数详解

    声明:博客参考于https://www.cnblogs.com/yangmin86/p/7090882.html,谢谢哥们 回调函数:是指在A类执行代码时,调用了B类中的方法,但B类中的方法执行了A类 ...

  9. java回调函数学习

    前不久学习了代理模式,其中有一个核心之一是Proxy.newProxyInstance();这里有三个参数, loader:目标对象的类加载器 interfaces:目标对象实现的所有接口组成的数组 ...

  10. 一个简单的java回调函数的实现

    回调函数 回调函数涉及的3个函数 登记回调函数 回调函数 响应回调函数 简单的解释 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话.过了几天店里有货了,店员就打了你的电话,然 ...

随机推荐

  1. Day1上午解题报告

    预计分数:100+60+0=160 实际分数:100+30+20=150 T1立方数(cubic) 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方数 ...

  2. ps---报告当前系统的进程状态

    ps aux最初用到Unix Style中,而ps -ef被用在System V Style中,两者输出略有不同.现在的大部分Linux系统都是可以同时使用这两种方式的. linux上进程有5种状态: ...

  3. [PWA] Deal with caches in PWA

    The takeway is to know when we should cache the content? When we should clean the caches? 1. When sh ...

  4. js31---观察者模式

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. if 的理解

    1. if 实现集合的划分 比如著名的 Prim 算法(最小生成树),从某一确定的点出发,每次新加入的点,都是在已访问过的结点(u∈U)和未访问过(v∈V−U)的结点之间的边.这里的未被访问(V−U) ...

  6. ASP.NET MVC 4 (十一) Bundles和显示模式--asp.net mvc中 @Scripts.Render("~/bundles/jquery")是什么意思? 在布局文件中使用Scripts.Render()输出脚本包,Styles.Render()输出风格包:

    ASP.NET MVC 4 (十一) Bundles和显示模式 ASP.NET MVC 4 引入的js打包压缩功能.打包压缩jquery目录下的文件,在布局文件中使用Scripts.Render()输 ...

  7. golang sync.Once

    package main import ( "fmt" "sync" "time" ) func main() { var once syn ...

  8. Restlet 学习笔记

    摘要:网络上对 restlet 的评判褒贬不一,有的说框架封装的很好,很有弹性,有的说 rest 架构风格本身是一种简单的风格,restlet 过设计以使编程过于复杂,其实我倒不觉得 restlet ...

  9. HDU 2281 Square Number Pell方程

    http://acm.hdu.edu.cn/showproblem.php?pid=2281 又是一道Pell方程 化简构造以后的Pell方程为 求出其前15个解,但这些解不一定满足等式,判断后只有5 ...

  10. Django路由分配以及模版渲染

    路由上: 在网络上区分不同的电脑通过IP.端口和网卡的MAC地址等,在web框架中怎么区分不同的请求呢,就是通过 ‘url(路由)’ ,url 学名叫做全球统一资源定位符,其实就是一个网址 一个url ...