详解java的回掉函数与接口
来源:互联网 发布:js保存数据到本地文件 编辑:程序博客网 时间:2024/06/11 06:29
相信很多人都是听一些大牛说,用回调函数,接口,听起来是挺高大上的,我去这个东西是什么呀?很多人去找网上的官方的帖子,然后看了半天还是一脸蒙蔽,什么都没学会。所谓回调:就是一个类要调用另一个类的方法,当另一个类的方法执行完毕的时候反过来调用了上一个类的方法。而且,回调经常本使用到线程中,java的线程确实很复杂,这里就以回调来简单提一下,是不是还是有点拗口,下面举个例子就可以清楚的表述了。
相信很多大学码农的女朋友都是键盘和鼠标,可是‘小明’作为武汉科技大学打学霸的他缺有着一个美若天仙的妹子名叫‘小花’,小明和小花感情非常的好,有一天,小明想约小花出去吃饭,这是小花就想小明想干嘛,大晚上的,我得好好打扮一番,就和小明说等捣腾两下在给你打电话,小明不仅是学霸,而且玩穿越火线也很牛,他肯定不是闲着蛋疼的等小花,于是就开始玩起了穿越火线。小花捣腾了半个小时后给小明打电话说出去吃饭吧,我捣腾好了。
上面这个例子已经很充分的体现了回调的含义了,下面举3个例子来详解回调(后面2个是android的小demo)
package callback;/** * 定义了一个回调接口 * @author 年少 * */public interface CallBack { /** * 这个是小花打扮完了通过这个方法来告诉小明,就是回调函数 * @param result 是答案 */ public void Answer(String result);}
package callback;/** * 小明,实现了回调接口 * @author nianshao * */public class XiaoMing implements CallBack {//定义了小明的女朋友private XiaoHua xiaoHua ;/** *实现女朋友 * @param xiaoHua */public XiaoMing(XiaoHua xiaoHua) {this.xiaoHua = xiaoHua;}/** * 小明通过这个方法问小花能否一起吃个饭 * @param ask 问 */public void canEatTogether(String ask) {//这里模范两人对话过程,相当于一个耗时操作,即开启一个线程new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubxiaoHua.Message(XiaoMing.this, ask);}}).start();//小明才不会闲着蛋疼的等小花回复,于是去耍了两把CfplayCf();}public void playCf() { System.out.println("穿越火线真好玩!"); }/** * 这里就是回调回来的东西 * 小花通过这个方法告诉小明我们可以去吃饭了 * @param result */@Overridepublic void Answer(String result) { System.out.println("小花告诉小明的回复是--->" + result); }}
package callback;/** * 这个是小花 * @author meng * */public class XiaoHua {public void Message(CallBack callBack,String ask) { System.out.println( ask); //小明用睡眠来模拟小花捣腾了大半个小时 new Thread(new Runnable() {@Overridepublic void run() {//小花捣腾好了String result = "我捣腾了,我们去吃饭吧";/** * 准备给小明打电话,说我们可以去吃饭了 * 这里就开始回调回去了 */callBack.Answer(result);}}).start();}}看完了这块代码是不是觉得一下子就理解了回调的含义,上面是个异步回调,与之相对的就是同步回调了,下面就以android的点击事情做详解同步回调.(android 基于java)
所谓通步回调,就是触发就立马回调,这里很容易联想起来,android点击事情,其实现 原理莫过于回调机制,
现在来分析分析下Android View的点击方法onclick();我们知道onclick()是一个回调方法,当用户点击View就执行这个方法,我们用Button来举例好了
public interface OnClickListener { /** * Called when a view has been clicked. * * @param v The view that was clicked. */ void onClick(View v); }public void setOnClickListener(@Nullable OnClickListener l) { if (!isClickable()) { setClickable(true); } getListenerInfo().mOnClickListener = l; } /** * Call this view's OnClickListener, if it is defined. Performs all normal * actions associated with clicking: reporting accessibility event, playing * a sound, etc. * * @return True there was an assigned OnClickListener that was called, false * otherwise is returned. */ public boolean performClick() { final boolean result; final ListenerInfo li = mListenerInfo; if (li != null && li.mOnClickListener != null) { playSoundEffect(SoundEffectConstants.CLICK); li.mOnClickListener.onClick(this); result = true; } else { result = false; } sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED); return result; }package com.union.test.myapplication;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;public class Main2Activity extends AppCompatActivity implements View.OnClickListener { private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(this); } @Override public void onClick(View v) { }}这里实现逻辑就非常简单了,在MainActivity中实现了点击事件回调的接口OnclikLister,定义了一个Button,并且给他注册了点击事件,当按钮点击的时候去调用view底下的 performClick()这个方法,然后完成之后回调给MainActivity的onClick()方法中。是不是看了上面的代码,解决了一直很迷糊的东西.在这里希望你能点个关注,坚持更新学习体会博客.深入学习,分享java。
原创转载时候请注明转载出处.
阅读全文
1 0
- 详解java的回掉函数与接口
- java的接口详解
- java详解 --- 抽象与接口
- c的回调函数与java中抽象函数,接口函数,抽象类简单理解
- java的接口回调机制详解
- 在Java里抽象类与接口的区别详解
- 详解java中接口与抽象类的区别
- 牛刀小试 - 详解Java中的接口与内部类的使用
- java中与接口有关的匿名类详解
- java多线程-Lock与Condition接口的使用详解
- java接口实现与抽象类的代码详解
- java 函数式接口与lambda表达式的关系
- Java 接口interface的详解
- Java接口的基本概念详解
- java详解 --- 接口的优化
- Java:关于接口(interface)详解;接口与抽象类的区别
- java与android的接口回调
- java中抽象类与接口详解
- Android安卓——实现发短信功能的代码
- ndk 编译问题
- set和multiset
- BM算法
- jzoj5484 【清华集训2017模拟11.26】快乐树 (发现性质的dp)
- 详解java的回掉函数与接口
- java 枚举类型
- php trait
- Scrapy框架学习(一)----Scrapy介绍及第一个项目
- IMX6 理解Android编译命令
- (初中OJ)2242. 【2017.11.25普及组模拟】Bob
- 【Scikit-Learn 中文文档】集成方法
- jmeter—解决响应乱码问题
- C语言(30)年龄排序