`
wangyang_09
  • 浏览: 95295 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java中的回调函数学习

    博客分类:
  • J2SE
阅读更多
一般来说分为以下几步:
  1. 声明回调函数的统一接口interface A,包含方法callback();
  2. 在调用类caller内将该接口设置为私有成员private A XXX;
  3. 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形参传入caller的XXX);
  4. caller的某个方法dosth()中会用到XXX.callback()方法;
  5. 在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排序的compare接口

interface Compare {
   boolean lessThan(Object lhs, Object rhs);
   boolean lessThanOrEqual(Object lhs, Object rhs);
  }

import java.util.*;
  
  public class SortVector extends Vector {
   private Compare compare; // 私有接口成员
   public SortVector(Compare comp) {
       compare = comp;
   }
   public void sort() {
       quickSort(0, size() - 1);
   }
   private void quickSort(int left, int right) {
       if(right > left) {
      Object o1 = elementAt(right);
      int i = left - 1;
      int j = right;
      while(true) {
           while(compare.lessThan(
             elementAt(++i), o1))
                      ;
           while(j > 0)
             if(compare.lessThanOrEqual(
                  elementAt(--j), o1))
                     break; 
              if(i >= j) break;
                  swap(i, j);
       }
      swap(i , right);
      quickSort(left, i-1);
      quickSort(i+1, right);
       }
    }
    private void swap(int loc1, int loc2) {
       Object tmp = elementAt(loc1);
       setElementAt(elementAt(loc2), loc1);
       setElementAt(tmp, loc2);
   }
  } 

分享到:
评论

相关推荐

    Java简单的回调(interface)demo

    Java简单的回调demo,写了个java最简单的回调demo,便于学习!最复杂的东西都是由简单来的,欢迎下载!

    javascript回调函数详解

    在高级语言层出不穷的年代, 各个语言都号称有着一切皆为对象的自豪说法, 而 js 作为一门脚本语言却相对于java等传统面向对象语言有很大的不同之处, 除了 js 诡异的继承体系之外, 最令人着迷的一个特性就是回调函数, ...

    说明Java的传递与回调机制的代码示例分享

    主要介绍了说明Java的传递与回调机制的代码示例分享,传递与回调机制是Java入门学习中的基础知识,需要的朋友可以参考下

    Java开发技术大全(500个源代码).

    impRecall.java 实现回调函数 inheritConstruct_1.java 构造器继承示例1 inheritConstruct_2.java 构造器继承示例2 inheritConstruct_3.java 构造器继承示例3 inheritConstruct_4.java 构造器继承示例4 ...

    Thinking in Java简体中文(全)

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    java联想(中文)

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    Thinking in Java 中文第四版+习题答案

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    java 编程入门思考

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    Java初学者入门教学

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    JAVA_Thinking in Java

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    Kotlin 使用高阶函数实现回调方式

    之前学习了 lambda 和高阶函数,然后在 android 开发中对 onClick 事件进行监听是一个很常用的功能,kotlin 的常规实现如下: rootView.setOnClickListener { view -> println(点击了这个ID=${view.id}的view) }...

    疯狂JAVA讲义

    6.7.6 闭包(Closure)和回调 215 6.8 枚举类 217 6.8.1 手动实现枚举类 217 6.8.2 枚举类入门 219 6.8.3 枚举类的属性、方法和构造器 220 6.8.4 实现接口的枚举类 223 6.8.5 包含抽象方法的枚举类 224 6.9 ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    基于java实现的数据库管理系统.pdf

    DBFContent.java:这个是⼀个JavaBean,通过将读取到的DBF中数据存储到这个JavaBean中,实现对数据库中数据的操作 DBFUtils.java:DBF⽂件操作⼯具类,通过对javadbf4.1.jar中函数的调⽤,实现对DBF⽂件的读写操作...

    Think in Java(中文版)chm格式

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.8.2 使用专门的监听器实现回调 448 10.8.3 为全部实体配置默认监听器 450 10.8.4 排除监听器 452 10.9 本章小结 455 第11章 JPA的查询支持 456 11.1 查询API 457 11.1.1 面向对象的JPQL 457 11.1.2 查询API简介 ...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A.5.2 MS Java/COM集成 A.5.3 用Java设计COM服务器 A.5.4 用Java设计COM客户 A.5.5 ActiveX/Beans...

    Java学习笔记-个人整理的

    {7.2}回调模式与FileFilter}{104}{section.7.2} {7.3}\ttfamily RandomAccessFile}{106}{section.7.3} {7.4}基本类型数据序列化}{108}{section.7.4} {7.5}String的序列化}{109}{section.7.5} {7.6}InputStream...

    springboot+redis过期事件监听实现过程解析

    主要介绍了springboot+redis过期事件监听实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Web前端Ajax&JQuery视频教程课件

    本套Java教程涵盖Ajax的实现原理,XMLHttpRequest实现Ajax,回调函数,Ajax数据交换格式(HTML、XML、JSON),Ajax发送GET和POST请求,异步编程模型和同步编程模型,解决Ajax的GET请求缓存问题,使用Ajax验证用户名...

Global site tag (gtag.js) - Google Analytics