精华内容
下载资源
问答
  • Java 回调函数详解 前言: C语言中回调函数解释: 回调函数(Callback Function)是怎样一种函数呢? 函数是用来被调用的,我们调用函数的方法有两种:  直接调用:在函数A的函数体里通过书写函数B的函数名来调用...
  • java回调函数

    2017-08-31 17:08:17
    java回调函数
  • java 回调函数 实现

    2013-07-24 09:58:44
    java 回调函数 自己模拟实现 使用了接口来完成
  • 再谈java回调函数

    2020-09-03 12:10:50
    个人对于回调函数的理解就是回调函数就是回头再调用的函数,哈哈,下面我们来详细探讨下回调函数
  • Java回调函数实现案例

    千次阅读 2020-04-02 09:15:31
    1、什么是回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数回调函数不是由该函数的实现方...

    1、什么是回调函数

            回调函数,是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。在Java中,指针即所谓的引用。回调函数不是由该函数的实现方直接调用,而是在特定的事件条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

            回调方法 是 任何一个 被 以该回调方法为其第一个参数 的 其它方法 调用 的方法。很多时候,回调是一个当某些事件发生时被调用的方法。

    2、应用场景

    事件驱动机制

    举例:甲雇佣乙修车;然后甲就去做其他事情;乙完成后通知甲:车已修好,请来取。即甲没必要一直等待乙修完车。

    3、代码示例

    1、测试类

    package com.callBack;
    public class CallBckTest {
    
        public static void main(String[] args) {
            MainBusiness mainBusiness = new MainBusiness();
    
            System.out.println("*********具体实现类实现的回调方法_固定*********");
            mainBusiness.execute(new CallbackServiceImpl());
    
            System.out.println("*********匿名内部类实现的回调方法_灵活*********");
            mainBusiness.execute(new CallbackService() {
                public void callBackFunc() {
                    System.out.println("匿名内部类回调函数开始执行...");
                    System.out.println("匿名内部类回调函数结束执行...\n");
                }
            });
        }
    }
    

    2、业务类与方法 

    package com.callBack;
    public class MainBusiness {
    
        private CallbackService callback;
    
        public void execute(CallbackService callback) {
            this.callback = callback;
            callBack();
        }
    
        public void callBack() {
            callback.callBackFunc();
        }
    }

    3、回调函数接口 

    package com.callBack;
    //回调函数之接口与方法
    public interface CallbackService {
        void callBackFunc();
    }
    

    4、回调函数实现类

    package com.callBack;
    public class CallbackServiceImpl implements CallbackService {
        @Override
        public void callBackFunc() {
            System.out.println("具体实现类回调函数开始执行...");
            System.out.println("具体实现类回调函数结束执行...\n");
        }
    }
    

    5、打印结果

    *********具体实现类实现的回调方法_固定*********
    具体实现类回调函数开始执行...
    具体实现类回调函数结束执行...
    
    *********匿名内部类实现的回调方法_灵活*********
    匿名内部类回调函数开始执行...
    匿名内部类回调函数结束执行...

     

     

    展开全文
  • 主要介绍了Java回调函数与观察者模式实例代码,简单介绍了使用观察者模式的场景,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
  • 主要介绍了 Java 回调函数深入理解的相关资料,需要的朋友可以参考下
  • Java回调函数理解和应用

    千次阅读 2017-11-03 17:24:48
    Java回调函数理解和应用在未理解之前,一脸懵逼,等我理解之后,发现和Javascript的回调函数原理是一样。 举个例子有个程序员和一个项目经理,XX项目经理向程序员安排任务让程序员去完成,程序员获得任务并记下是XX...

    Java回调函数理解和应用

    所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的。
    在未理解之前,我也是一脸懵逼,等我理解之后,发现和Javascript的回调函数原理基本是一样,一个是将对象作为参数传递,一个是将函数作为参数传递。
    从维基百科上面摘抄定义:
    在计算机程序设计中,回调函数,或简称回调,是指通过函数参数传递到其它代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序。

    举个例子有个程序员和一个项目经理,XX项目经理向程序员安排任务让程序员去完成,程序员获得任务并记下是XX项目经理安排的任务,程序员将任务完成后,获取通知XX项目经理的方式,发送一条信息通知项目经理任务已经完成。

    下面上实例:
    新建一个项目经理类:

    public class ProjectManager {
    
        private String name;
    
        public ProjectManager(String name)
        {
             this.name =name;
        }
    
        public String getName()
        {
            return this.name;
        }
    
        /**
         * 通知方法
         * @param msg
         */
        public void noticeMe(String msg)
        {
            System.err.println(msg);
        }
    
        /**
         * 安排任务
         * @param task
         */
        public void arrange(String task)
        {
            //安排程序员干活
            new Programmer().receiveTask(task, this);
        }
    
        public void doOtherWork()
        {
            System.err.println("项目经理干其他事情...");
        }
    
    }
    

    新建一个程序员类:

    
    import java.util.concurrent.TimeUnit;
    
    
    public class Programmer {
    
        //记下是XX项目经理,而不是其他项目经理
        ProjectManager manager;
        /**程序员接受任务*/
        public void receiveTask(String task,ProjectManager manager)
        {
            this.manager = manager;
            try {
                //程序员开始执行任务
                this.excuteTask(task);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        /**执行任务*/
        private void excuteTask(String task) throws InterruptedException
        {
            System.err.println("执行项目经理:"+manager.getName()+"安排的任务-->"+task);
            //任务执行中
            TimeUnit.SECONDS.sleep(1);
            //任务完成
            this.finished(task);
        }
        /**任务完成*/
        public void finished(String task)
        {
            //获取通知项目经理的方法,并发出通知
            //进行函数回调,这里还不算真正的回调
            manager.noticeMe(manager.getName()+"你好,你安排的任务"+task+"已经完成!");
        }
    
    }
    

    新建测试类:

    public class CallbackTest {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            ProjectManager prjMgr = new ProjectManager("王响");
            prjMgr.arrange("今晚完成数据库设计...");
            prjMgr.doOtherWork();
        }
    
    }

    运行结果:
    运行结果

    但实际上,项目经理可能有好多个联系方式,有些方式可能是无效的。那我怎样才能知道哪个才是真确的通知方式呢?那就需要项目经理指定哪个方式是正确的,这样程序员也只要记住联系方式即可。在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数。
    定义一个通知接口:

    public interface Notice {
        public void noticeMe(String msg);
    }

    改写项目经理类:

    public class ProjectManager implements Notice{
    
    private String name;
    
    public ProjectManager(String name)
    {
     this.name =name;
    }
    
    public String getName()
    {
    return this.name;
    }
    
    /**
     * 通知方法
     * @param msg
     */
    @Override
    public void noticeMe(String msg)
    {
    System.err.println(msg);
    }
    
    /**
     * 安排任务
     * @param task
     */
    public void arrange(String task)
    {
    //安排程序员干活
    new Programmer().receiveTask(task, this);
    }
    
    public void doOtherWork()
    {
    System.err.println("项目经理干其他事情...");
    }
    
    }

    改写程序员类

    import java.util.concurrent.TimeUnit;
    
    
    public class Programmer{
    
        //指定了通知方式
        Notice notice;
        /**程序员接受任务*/
        public void receiveTask(String task,Notice notice)
        {
            this.notice = notice;
            try {
                //程序员开始执行任务
                this.excuteTask(task);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        /**执行任务*/
        private void excuteTask(String task) throws InterruptedException
        {
            System.err.println("执行项目经理:安排的任务-->"+task);
            //任务执行中
            TimeUnit.SECONDS.sleep(1);
            //任务完成
            this.finished(task);
        }
        /**任务完成*/
        public void finished(String task)
        {
            //获取通知项目经理的方法,并发出通知
            //进行回调通知
            notice.noticeMe("你好,你安排的任务"+task+"已经完成!");
        }
    
    }

    那我们为什么要使用回调函数呢?
    简单来说就是,我自己活太多,或者有其他的事需要做,自己不想做,就把这个活分配给别人去完成,并把完成的结果告诉我就行了。

    如果看到这里你若还没有懂的话,那我换一种方式表达:回调函数就是别人要调用我的时候,我要告诉别人我这个方法的地址在那里,然后别人直接找这个地址就行,不用再去向系统申请内存地址然后去找这个方法在哪里。

    展开全文
  • java自定义回调函数

    2015-04-05 23:43:35
    java自定义回调函数代码,SDK开发.对后续编写自己的SDK有帮助!
  • 主要介绍了Java回调函数实例代码详解,需要的朋友可以参考下
  • Java回调函数的理解

    2012-12-25 16:23:11
    某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着电话在那里傻等,于是我们约定:等你想出...我的手机号码应该有效并且手机能够接收到你的呼叫,这是回调函数必须符合接口规范。
  • 背景: 想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地读文件,然后根据不同的业务,对每一行进行不同处理。最后输出到文件 out
    原文地址为:
    Java 回调函数(传统方法和lambda方法)-一个例子秒懂
    

    背景:
    想写一个工具类 Tool.java ,其中方法 public void readOneLine() 负责一行一行地读文件,然后根据不同的业务,对每一行进行不同处理。最后输出到文件 out.txt

    那么问题来了,根据不同的业务,进行不同处理 怎么实现?

    自然而然想到,每个业务有一个对读取的一行的处理方法 public void 业务名(),我们把方法作为参数传入 public void readOneLine(业务名()),比如:

    业务A:
    readOneLine(直接输出每一行())
    业务B:
    readOneLine(每一行全部大写后输出())
    业务C:
    readOneLine(输出每一行的第一个单词())
    ......

    很可惜,java 7不支持这样的语法,也许java 8 的 lambda 表达式可以?这不在今天讨论的范围里

    java 7 要实现这样的功能需要通过回调函数

    回调函数 - A类中调用B类中的某个方法methodB(),然后 methodB() 中反过来调用A类中的methodA()。methodA()这个方法就叫回调函数

    一个同步回调函数的例子

    回调函数接口,这个接口是必须的吗?
    是。不仅为了符合面向接口编程的规范
    事实上,调用方将会 Override 接口的 具体业务逻辑(),达到传函数给被调用方的目的。

    //回调函数接口及方法 
    public interface 业务逻辑 {
    public void 具体业务逻辑();
    }
    public class Tool {  
    private 业务逻辑 yewuluoji; //私有接口成员
    public void setYewuluoji(业务逻辑 yewuluoji){
    this.yewuluoji = yewuluoji;
    }
    public void 工具类逻辑() {
    //读文件
    while(每一行){
    yewuluoji.具体业务逻辑();
    }
    }
    }

    测试类:

    public class MainClass {  
    public MainClass() {
    }
    public static void main(String[] args) {
    Tool tool = new Tool();
    //传入 匿名实现类,包含具体业务逻辑
    tool.setCallback(new 业务逻辑{
    @Override
    public void 具体业务逻辑() {
    //输出每一行的第一个单词
    }
    });

    tool.工具类逻辑(); //此方法中回调匿名类的具体业务逻辑(),即:输出每一行的第一个单词
    }
    }

    java 8 lambda方式传函数(仅仅是语法糖?)

    匿名类型最大的问题就在于其冗余的语法。有人戏称匿名类型导致了“高度问题”(height problem):比如前面ActionListener的例子里的五行代码中仅有一行在做实际工作。

    lambda表达式是匿名方法,它提供了轻量级的语法(语法糖?),从而解决了匿名内部类带来的“高度问题”。

    下面是一些lambda表达式:

    (int x, int y) -> x + y
    () -> 42
    (String s) -> { System.out.println(s); }

    lambda表达式的语法由参数列表箭头->(等价于return)函数体组成。函数体既可以是一个表达式,也可以是一个语句块:

    lambda表达式也会经常出现在嵌套环境中,比如说作为方法的参数。为了使lambda表达式在这些场景下尽可能简洁,我们去除了不必要的分隔符。不过在某些情况下我们也可以把它分为多行,然后用括号包起来,就像其它普通表达式一样。

    下面是一些出现在语句中的lambda表达式:

    FileFilter java = (File f) -> f.getName().endsWith("*.java");

    String user = doPrivileged(() -> System.getProperty("user.name"));

    new Thread(() -> {
    connectToService();
    sendNotification();
    }).start();

    转载请注明本文地址: Java 回调函数(传统方法和lambda方法)-一个例子秒懂
    展开全文
  • java 回调函数例子,其原理,与代理模式的区别

    万次阅读 多人点赞 2019-01-17 17:21:41
    java 回调函数例子,及其原理 回调函数   应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成...

    java 回调函数例子,及其原理,与代理模式的区别

    回调函数

      应用程序(application program)会时常通过API调用库里所预先备好的函数。但是有些库函数(library function)却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数(callback function)。
    作用: 可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。

    例子

    一个计算函数运行时间的工具类,正常方法

    /**
     * @Auther: cpb
     * @Date: 2019/1/17 16:32
     * @Description:
     */
    public class RunningTime {
        /**
         * 一个用来被测试的方法,进行了一个比较耗时的循环
         */
        public   static   void  testMethod(){
            for ( int  i= 0 ; 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) {
            RunningTime test=new  RunningTime();
            test.testTime();
        }
    }
    

    创建回调函数接口

    public interface CallBack {
        //执行回调操作的方法
        void  execute();
    }
    

    回调函数

    /**
     * @Auther: cpb
     * @Date: 2019/1/17 16:35
     * @Description:
     */
    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(){
                    //这里可以加放一个或多个要测试运行时间的方法
                    RunningTime.testMethod();
                }
            });
        }
    }
    

    为什么叫回调函数

    我们观看一下程序运行的流程,tools->CallBacks->tools,顾为回调函数。

    代理模式

    //接口
    public interface CallBack {
        //执行回调操作的方法
        void  execute();
    }
    //实现类
    public class MyCallBack implements CallBack{
        @Override
        public void execute() {
            MyCallBack.testMethod();
        }
        public   static   void  testMethod(){
            for ( int  i= 0 ; i< 100000000 ; i++){
    
            }
        }
    }
    
    //代理类
    public class Proxy implements CallBack {
        private CallBack callBack;
    
        public Proxy(CallBack callBack){
            this.callBack = callBack;
        }
        @Override
        public void execute() {
            callBack.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();
            //让代理去实现方法去调用方法
            Proxy proxy = new Proxy(new MyCallBack());
            tool.testTime(proxy);
        }
    }
    

    代理模式和回调函数的区别

    1. 代理模式需要创建接口实现类,并放入代理类中,隔离性更好,扩展性好
    2. 回调函数不需要创建接口实现类,编写方便。
    展开全文
  • java回调函数详解

    万次阅读 多人点赞 2018-04-15 22:43:39
    序言最近学习java,接触到了回调机制(CallBack)。初识时感觉比较混乱,而且在网上搜索到的相关的讲解,要么一言带过,要么说的比较单纯的像是给CallBack做了一个定义。当然了,我在理解了回调之后,再去看网上的各种...
  • JAVA回调函数简单讲解 CallBack

    千次阅读 2019-02-12 15:08:50
    那么,接下来,我们就用消息推送的场景,简简单单地讲解下回调函数的使用。 直接看代码, 先创建一个回调接口, MessageCallBack /** * @Author : JCccc * @CreateTime : 2019-2-12 * @Description :回调...
  • Java回调函数的理解

    千次阅读 2017-03-13 11:13:39
    最近在看Java的时候看到了回调函数。只看书写的没有弄明白,于是乎去网上搜了搜相关内容。 首先先看一个比较生动的例子: 某天,我打电话向你请教问题,当然是个难题,^_^,你一时想不出解决方法,我又不能拿着...
  • java回调函数-异步回调-简明讲解

    千次阅读 2018-05-14 22:59:25
    java回调函数-异步回调-简明讲解 叙言: 异步回调常用于某些业务需要很长时间处理,但是又需要立刻返回结果,这种情况都需要开辟线程独立处理需要长时间多的业务,也无处理完了,回调回调函数,再去处理与之有关的...
  • Java 回调函数作用和使用场景

    千次阅读 2017-09-13 13:51:03
    1. 什么是回调函数  回调函数(callback Function),顾名思义,用于回调的函数。 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。回调函数是一个工作流的一部分,由工作流来决定函数的...
  • package com.jd.ls.job.destroy; public interface ComputeCallBack { public void onComputeEnd(); } package ... public class TestCallBack { public void compute(int n, ComputeCallBack ca...
  • java回调函数机制

    千次阅读 多人点赞 2015-07-15 23:19:01
    软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调、异步调用 。 同步调用:一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用; 回调:一种双向调用模式,也...
  • java回调函数(callBack)

    万次阅读 2019-01-28 00:34:47
    最近有个新同事给我写了个接口,说是用到了回调,我等了半天发现结果才返回回来,把我都整急了。最后我看了他的代码,目瞪口呆。他还信誓旦旦的说没错,按网上的例子来写的。  我一搜,网上例子真一大堆,并且都...
  • Java多线程实现 自定义 的 回调函数. 手写 完成,亲测 完成,可以 直接运行,Demo ,具有一定参考价值,供大家阅读 下载,谢谢
  • 通俗讲解 java 回调函数 callBack 的异步回调 一看就会懂 趣味讲解哦: 先说 这个 callBack , 扒拉很多资料 都说是 回调 ,回调。 回调 你大爷啊。 根本没说清楚 回调 到底是咋回事。 有的还说 是 什么 ...
  • Java 回调函数详解及使用
  • 回调函数实例练习

    2014-10-21 17:58:25
    这个程序是我在理解回调函数时编写的一个Demo. 里面包含了三部分: 1.回调函数 2.观察者模式 3.代理模式 配套有CSDN博文:关于回调函数的理解,以及观察者模式,代理模式
  • 深入理解Java回调函数

    万次阅读 多人点赞 2016-04-03 01:17:49
    C语言中回调函数解释: 回调函数(Callback Function)是怎样一种函数呢? 函数是用来被调用的,我们调用函数的方法有两种: 1 直接调用:在函数A的函数体里通过书写函数B的函数名来调用之,使内存中对应函数B的...
  • java 回调函数同步、异步调用

    千次阅读 2016-11-25 15:09:42
    回调函数的应用在于确保串行运算时,同时支持并行的处理。该模式在底层开发模式中应用非常广泛。 package com; /** * java回调应用 * @author zh.h * */ public class TestCallBack { public void ...
  • java 回调函数的写法

    千次阅读 2015-09-17 16:50:38
    * 回调函数解析 * 1、要在这个类里面实例化另外一个类里面的接口,传递数据过去 * 2、在另外一个类里面调用他的接口的方法,实际执行的是这个类里面的回调方法 */ // 这是pass类中的一个回调函数————这是...
  • 1、回调函数分类 回调函数区分同步回调和异步回调: 同步回调,意义只在于完成方法调用; 异步调用,可以实现并行,业务线程可以及时释放,剩下的工作交个异步线程完成;提高了执行效率 2、代码示例 1、测试...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 203,219
精华内容 81,287
关键字:

java回调函数

java 订阅