首页 / JAVA / 了解java回调函数
了解java回调函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了了解java回调函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2479字,纯文字阅读大概需要4分钟。
内容图文
在计算机程序设计中,回调函数,或简称回调(Callback 即call then back 被主函数调用运算后会返回主函数),是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。(维基百科)
C的回调
在C/C++中,回调函数是一个通过函数指针调用的函数,当你把函数的指针作为参数传递给另外一个函数。当这个指针被用来调用其所指向的函数时,我们称这样的函数为回调函数。
实用情况举例:
1. 假设要编写一个库,其中提供了某些排序算法。(如冒泡排序,快速排序,shell排序,shake排序等),为了使库通用,我们不想在排序算法函数体内嵌入排序逻辑,并且想使该算法支持多种数据类型。此时就可以使用函数指针,进行回调。
2.回调还可以用于通知机制。
Java的回调
接口通常被使用在Java编程语言,用来做回调函数使用 。Java并不允许方法作为参数传递使用,因此,其中一个解决办法则是可以定义一个接口,把这个接口当成方法的参数,以此来使用该项对象的方法签名。
实现原理:
首先创建一个回调对象,然后再创建一个控制器对象,将回调对象需要被调用的方法告诉控制器对象。控制器对象负责检查某个场景是否出现或某个条件是否满足。当此场景出现或此条件满足时,自动调用回调对象的方法。
以android的SoundRecorder举例。
1. 定义一个相关的接口
// 回调接口 public class Recorder implements OnCompletionListener, OnErrorListener { publicinterface OnStateChangedListener { publicvoid onStateChanged(int state); publicvoid onError(int error); } }
2. Class A实现接口 interface 中的callback 方法。
// SoundRecorder类对接口进行实现 public class SoundRecorder extends Activity implements Recorder.OnStateChangedListener { publicvoid onError(int error) { Resources res = getResources(); boolean isExit = false; String message = null; switch (error) { case Recorder.SDCARD_ACCESS_ERROR: message = res.getString(R.string.error_sdcard_access); break; case Recorder.INTERNAL_ERROR: message = res.getString(R.string.error_app_internal); isExit = true; break; case Recorder.UNSUPPORTED_FORMAT: message = res.getString(R.string.error_app_unsupported); isExit = true; break; } }
3. Class B中有一个以接口为参数的方法。
public void setOnStateChangedListener(OnStateChangedListener listener) { mOnStateChangedListener = listener; } OnStateChangedListener mOnStateChangedListener = null; //引用回调对象
4. Class A中的对象调用Class B中的该方法。
class SoundRecorder public void onCreate(Bundle icycle) { mRecorder = new Recorder(); mRecorder.setOnStateChangedListener(this);//传入回调对象 }
5. 然后当某些情况发生后,Class B通过callback的方式调起Class A中实现的接口方法。
class Recorder >> 1. publicvoid startRecording(int outputfileformat, String extension, Context context, int audiosourcetype, int codectype) { try { mRecorder.setAudioEncoder(codectype); } catch(RuntimeException exception) { setError(UNSUPPORTED_FORMAT); mRecorder.reset(); mRecorder.release(); if (mSampleFile != null) mSampleFile.delete(); mSampleFile = null; mSampleLength = 0; mRecorder = null; return; } } 2. privatevoid setError(int error) { if (mOnStateChangedListener != null) mOnStateChangedListener.onError(error); }
以上分析如有错误,请指正。
原文:http://www.cnblogs.com/item-notpeople/p/4855807.html
内容总结
以上是互联网集市为您收集整理的了解java回调函数全部内容,希望文章能够帮你解决了解java回调函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。