Java中的回调函数学习-深入浅出
Java中的回调函数一般来说分为下面几步:
- 声明回调函数的统一接口interface A。包括方法callback();
- 在调用类caller内将该接口设置为私有成员private A XXX;
- 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形參传入caller的XXX);
- caller的某个方法dosth()中会用到XXX.callback()方法;
- 在caller的实例中,先实现A接口。后调用dosth()方法;
样例:
- //回调函数接口及方法
- public interface ICallback {
- public void func();
- }
- //回调函数接口实现类
- public class ClassWithCallbackFunction implements ICallback{
- public ClassWithCallbackFunction() {
- }
- public void func(){
- System.out.println("cccccccccccccccccc");
- }
- }
- public class Caller {
- private ICallback callback; //私有接口成员
- public void setCallback(ICallback callback) {
- this.callback = callback; //接口成员的实现:从外部传入
- }
- public void doCallback() { //回调接口成员的方法
- callback.func();
- }
- }
- }
- public class MainClass {
- public MainClass() {
- }
- public static void main(String[] args) {
- Caller caller = new Caller();
- caller.setCallback(new ClassWithCallbackFunction() {
- public void func() {
- System.out.println("aaaaaaaaaa");
- }
- });
- caller.doCallback(); //实现回调
- }
- }
- //现实中是把doCallback()方法放在setCallback里调用,以上是为了说明回调原理
- public class Caller {
- ICallback callback;
- public void doCallback() {
- callback.func();
- }
- public void setCallback(ICallback callback) {
- this.callback = callback;
- doCallback();
- }
- }
以下再使用java回调函数来实现一个測试函数执行时间的工具类:
假设我们要測试一个类的方法的运行时间。通常我们会这样做:
- public class TestObject {
- /**
- * 一个用来被測试的方法。进行了一个比較耗时的循环
- */
- public static void testMethod(){
- ; i< 100000000 ; i++){
- }
- }
- /**
- * 一个简单的測试方法运行时间的方法
- */
- public void testTime(){
- long begin = System.currentTimeMillis(); //測试起始时间
- testMethod(); //測试方法
- long end = System.currentTimeMillis(); //測试结束时间
- System.out.println("[use time]:" + (end - begin)); //打印使用时间
- }
- public static void main(String[] args) {
- TestObject test=new TestObject();
- test.testTime();
- }
- }
大家看到了testTime()方法,就仅仅有testMethod()"//測试方法"是须要改变的,以下我们来做一个函数实现同样功能但更灵活:
首先定一个回调接口:
- public interface CallBack {
- //运行回调操作的方法
- void execute();
- }
然后再写一个工具类:
- public class Tools {
- /**
- * 測试函数使用时间,通过定义CallBack接口的execute方法
- * @param callBack
- */
- public void testTime(CallBack callBack) {
- long begin = System.currentTimeMillis(); //測试起始时间
- callBack.execute(); ///进行回调操作
- long end = System.currentTimeMillis(); //測试结束时间
- System.out.println("[use time]:" + (end - begin)); //打印使用时间
- }
- public static void main(String[] args) {
- Tools tool = new Tools();
- tool.testTime(new CallBack(){
- //定义execute方法
- public void execute(){
- //这里能够加放一个或多个要測试执行时间的方法
- TestObject.testMethod();
- }
- });
- }
- }
大家看到,testTime()传入定义callback接口的execute()方法就能够实现回调功能
Java中的回调函数学习-深入浅出的更多相关文章
- Java中的回调函数学习
Java中的回调函数学习 博客分类: J2SE JavaJ# 一般来说分为以下几步: 声明回调函数的统一接口interface A,包含方法callback(); 在调用类caller内将该接口设置 ...
- Java中的回调函数
本例拿apache commons dbutils举例 回调函数: 回调是指在执行时,具体的封装处理工用由第三方的类来实现. 回调一般由两部分组成 1:调用类 - QueryRunner.实例类 2: ...
- java与安卓中的回调callback学习笔记
1.回调的简单设计如下: package com.listercai.top; public class A { private CallBack callBack; private AnotherC ...
- 理解和使用 JavaScript 中的回调函数
理解和使用 JavaScript 中的回调函数 标签: 回调函数指针js 2014-11-25 01:20 11506人阅读 评论(4) 收藏 举报 分类: JavaScript(4) 目录( ...
- Java中的回调
又忙了一周,事情差不多解决了,终于有可以继续写我的博客了(各位看官久等了). 这次我们来谈一谈Java里的一个很有意思的东西--回调. 什么叫回调,一本正经的来讲,在计算机程序设计中,回调函数是指通过 ...
- 【Java入门提高篇】Day4 Java中的回调
又忙了一周,事情差不多解决了,终于有可以继续写我的博客了(各位看官久等了). 这次我们来谈一谈Java里的一个很有意思的东西——回调. 什么叫回调,一本正经的来讲,在计算机程序设计中,回调函数是指通过 ...
- 理解javascript中的回调函数(callback)【转】
在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...
- JavaScript 中的回调函数
原文:http://javascriptissexy.com/ 翻译:http://blog.csdn.net/luoweifu/article/details/41466537 [建议阅读原文,以下 ...
- 聊一聊 Vue 中 watch 对象中的回调函数为什么不能是箭头函数?
聊一聊 Vue 中 watch 对象中的回调函数为什么不能是箭头函数 本文重点知识点速览: Vue 中的 watch 对象中的回调函数不能是箭头函数. 箭头函数中的 this 指向的是函数定义时所在的 ...
随机推荐
- linux精彩收集
----------------------------网络无关篇-------------------------- 0001 修改主机名(bjchenxu) vi /etc/sysconfig/n ...
- 关于0x*** 十六进制的运算。为什么枚举多用十六进制的运算原因。。
1.看个人爱好 2.可以看出布尔运算的结果. 3.可以更快进行and和or 运算
- 行为型设计模式之状态模式(State)
结构 意图 允许一个对象在其内部状态改变时改变它的行为.对象看起来似乎修改了它的类. 适用性 一个对象的行为取决于它的状态, 并且它必须在运行时刻根据状态改变它的行为. 一个操作中含有庞大的多分支的条 ...
- 行为型设计模式之观察者模式(Observer)
结构 意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新. 适用性 当一个抽象模型有两个方面, 其中一个方面依赖于另一方面.将这二者封装在独 ...
- Hoof, Paper, Scissors(USACO)
题目大意: 一种游戏(类似于石头剪刀布):两个人分别给出一个字母,然后比较:H>S,S>P,P>H,我们已知对手的字母顺序,求在前n局中我们最多能赢多少次. 由于出字母的人非常懒,所 ...
- 杭电oj2031、2033、2070、2071、2075、2089、2090、2092、2096-2099
2031 进制转换 #include<stdio.h> #include<string.h> int main(){ int n,i,r,x,j,flag; ]; while ...
- linux free 命令 ,讲解得比较好
解释一下Linux上free命令的输出. 下面是free的运行结果,一共有4行.为了方便说明,我加上了列号.这样可以把free的输出看成一个二维数组FO(Free Output).例如: FO[2][ ...
- hdu 2489(状态压缩+最小生成树)
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 检查URL Protocol是否安装的项目
https://github.com/ismailhabib/custom-protocol-detection
- PHP获取IP的方法
function getIP() { if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $realip = $_SERVER['HTTP_X_FORWARD ...