精华内容
下载资源
问答
  • 本文的目的并不是介绍使用的什么技术,而是重点阐述回调接口其实现原理。一、 异步和同步讲通俗点,异步就是不需要等当前执行的动作完成,就可以继续执行后面的动作。通常一个程序执行的顺序是:从上到下,依次执行...

    本文的目的并不是介绍使用的什么技术,而是重点阐述回调接口其实现原理。

    一、 异步和同步

    讲通俗点,异步就是不需要等当前执行的动作完成,就可以继续执行后面的动作。

    通常一个程序执行的顺序是:从上到下,依次执行。后面的动作必须等前面动作执行完成以后方可执行。这就是和异步相对的一个概念——同步。

    案例:

    A、张三打电话给李四,让李四帮忙写份材料。

    B、李四接到电话的时候,手上有自己的工作要处理,但他答应张三,忙完手上的工作后马上帮张三写好材料,并传真给张三。

    C、通完电话后,张三外出办事。

    说明:

    张三给李四通完电话后,就出去办事了,他并不需要等李四把材料写好才外出。那么张三让李四写材料的消息就属于异步消息。

    相反,如果张三必须等李四把材料写好才能外出办事的话,那么这个消息就属于同步消息了。

    二、 异步的实现

    传统的程序执行代码都是从上到下,一条一条执行的。

    但生活中有很多情况并不是这样,以上的案例中,如果李四需要几个小时以后才能帮张三写好材料的话,那张三就必须等几个小时,这样张三可能会崩溃或者抓狂。

    这种一条龙似的处理,显示不太合理。

    可以使用以下办法来处理这种问题:

    张三找王五去给李四打电话,等李四写好材料后,由王五转交给张三。这样张三就可以外出办其他的事情了。

    问题得到了合理的解决,之前张三一条线的工作,由张三和王五两条线来完成了,两边同时进行,彼此不耽误。

    三、 计算机语言的实现

    办法有了,如何用程序来模拟实现呢?

    A、以前由一个线程来处理的工作,可以通过新增一个线程来达到异步的目的。这也就是JAVA中的多线程技术。

    B、最后李四写好的材料必须交给张三,以做他用。这就是回调。

    回调你可以这样来理解:

    A发送消息给B,B处理好A要求的事情后,将结果返回给A,A再对B返回的结果来做进一步的处理。

    四、 Java代码的实现

    A、回调的实现

    1 /**

    2 * 回调接口3 *@author节奏4 *5 */

    6 public interfaceCallBack {7 /**

    8 * 执行回调方法9 *@paramobjects 将处理后的结果作为参数返回给回调方法10 */

    11 public voidexecute(Object... objects );12 }

    Java是面向对象的语言,因此回调函数就变成了回调接口。

    B、消息的发送者

    1 /**

    2 * 简单本地发送异步消息的类3 *@author节奏4 *5 */

    6 public class Local implementsCallBack,Runnable {7

    8 /**

    9 * 远程接收消息的类,模拟point-to-point10 */

    11 privateRemote remote;12

    13 /**

    14 * 发送出去的消息15 */

    16 privateString message;17

    18 publicLocal(Remote remote, String message) {19 super();20 this.remote =remote;21 this.message =message;22 }23

    24 /**

    25 * 发送消息26 */

    27 public voidsendMessage() {28 /**当前线程的名称**/

    29 System.out.println(Thread.currentThread().getName());30 /**创建一个新的线程发送消息**/

    31 Thread thread = new Thread(this);32 thread.start();33 /**当前线程继续执行**/

    34 System.out.println("Message has been sent by Local~!");35 }36

    37 /**

    38 * 发送消息后的回调函数39 */

    40 public voidexecute(Object... objects ) {41 /**打印返回的消息**/

    42 System.out.println(objects[0]);43 /**打印发送消息的线程名称**/

    44 System.out.println(Thread.currentThread().getName());45 /**中断发送消息的线程**/

    46 Thread.interrupted();47 }48

    49 public static voidmain(String[] args) {50 Local local = new Local(new Remote(), "Hello");51

    52 local.sendMessage();53 }54

    55 public voidrun() {56 remote.executeMessage(message, this);57

    58 }59 }

    C、远程消息的接收者

    1 /**

    2 * 处理消息的远程类3 *@author节奏4 *5 */

    6 public classRemote {7

    8 /**

    9 * 处理消息10 *@parammsg 接收的消息11 *@paramcallBack 回调函数处理类12 */

    13 public voidexecuteMessage(String msg,CallBack callBack) {14 /**模拟远程类正在处理其他事情,可能需要花费许多时间**/

    15 for(int i=0;i<1000000000;i++) {16

    17 }18 /**处理完其他事情,现在来处理消息**/

    19 System.out.println(msg);20 System.out.println("I hava executed the message by Local");21 /**执行回调**/

    22 callBack.execute(new String[]{"Nice to meet you~!"});23 }24

    25 }

    executeMessage()方法需要接收一个message参数,表示发送出去的消息; 而CallBack参数是他自己,也就是这里的this。表示发送消息后,由Local类自己来处理,调用自身的execute      方法来处理消息结果。

    如果这里不是用this,而是用其他的CallBack接口的实现类的话,那就不能称之为“回调”了,在OO的世界里,那就属于“委派”。也就是说:“回调”必须是消息的发送者来处理消息结果,否则不能称之为回调。这个概念必须明确。

    展开全文
  • JAVA接口回调

    2021-03-09 18:22:36
    一:回调的用途回调一般用于层间协作,上层将本层函数安装在下层,这个函数...所谓的回调,就是程序员A了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,...

    一:回调的用途

    回调一般用于层间协作,上层将本层函数安装在下层,这个函数就是回调,而下层在一定条件下触发回调。例如作为一个驱动,是一个底层,他在收到一个数据时,除了完成本层的处理工作外,还将进行回调,将这个数据交给上层应用层来做进一步处理,这在分层的数据通信中很普遍。

    所谓的回调,就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。

    二:JAVA实现接口回调

    1.回调接口

    点击(此处)折叠或打开

    public interface CallbackInterface {

    public void callbackMethod();

    }

    2.接口引用

    点击(此处)折叠或打开

    public class Caller {

    public CallbackInterface callback;

    /**

    * @param callback

    * the callback to set

    */

    public void setCallback(CallbackInterface callback) {

    this.callback = callback;

    }

    public void call() {

    this.callback.callbackMethod();

    }

    }

    3.接口回调类

    点击(此处)折叠或打开

    public class Client implements CallbackInterface{

    /* (non-Javadoc)

    * @see com.enjoylink.gmap.mongodb.demo.CallbackInterface#callbackMethod()

    */

    @Override

    public void callbackMethod() {

    System.out.println("this is the client callbackMethod.");

    }

    }

    4.测试类

    点击(此处)折叠或打开

    public class CallbackTest {

    public static void main(String[] args) {

    Caller caller = new Caller();

    // Client client = new Client();

    // caller.setCallback(client);

    caller.setCallback(new CallbackInterface() {

    @Override

    public void callbackMethod() {

    System.out.println("匿名类回调");

    }

    });

    caller.call();

    }

    }

    三:Spring JdbcTemplate中的回调实例

    对于spring的JdbcTemplate进行结果集查询操作,spring给我们开发的是一系列的query方法,这些查询的方法中回调的接口主有三种:ResultSetExtractor,RowCallbackHandler,RowMapper,这个内容有图有真相:

    2bd1ecc5aac4302b9aa55b3ce7faf4b8.png

    1.ResultSetExtractor

    点击(此处)折叠或打开

    public interface ResultSetExtractor {

    Object extractData(ResultSet rs) throws SQLException,

    DataAccessException;

    }

    点击(此处)折叠或打开

    List userList = (List)jdbcDao.getJdbcTemplate().

    query("select * from T_USER", new ResultSetExtractor() {

    @Override

    public Object extractData(ResultSet rs) throws SQLException,

    DataAccessException {

    List userList = new ArrayList();

    while (rs.next()) {

    User user = new User();

    user.setId(rs.getInt("N_ID"));

    user.setName(rs.getString("C_NAME"));

    userList.add(user);

    }

    return userList;

    }

    });

    2.RowCallbackHandler

    点击(此处)折叠或打开

    public interface RowCallbackHandler {

    void processRow(ResultSet rs) throws SQLException;

    }

    点击(此处)折叠或打开

    final List userList = new ArrayList();

    jdbcDao.getJdbcTemplate().query("select * from T_USER",

    new RowCallbackHandler(){

    @Override

    public void processRow(ResultSet rs) throws SQLException {

    User user = new User();

    user.setId(rs.getInt("N_ID"));

    user.setName(rs.getString("C_NAME"));

    userList.add(user);

    }

    });

    3.RowMapper

    点击(此处)折叠或打开

    public interface RowMapper {

    Object mapRow(ResultSet rs, int rowNum) throws SQLException;

    }

    点击(此处)折叠或打开

    List userList = (List)jdbcDao.getJdbcTemplate().

    query("select * from T_USER", new RowMapper(){

    @Override

    public Object mapRow(ResultSet rs, int rowNumber)

    throws SQLException {

    User user = new User();

    user.setId(rs.getInt("N_ID"));

    user.setName(rs.getString("C_NAME"));

    return user;

    }

    });

    四:Android中的接口回调

    在android中回调机制被大量的使用。比如,在Activity中定义了很多生命周期的不同状态要调用的方法,这些方法都是空实现,系统框架要调用,用户也要调用来实现。

    举个简单的例子就是Button的点击响应事件实现机制

    点击(此处)折叠或打开

    button.setOnClickListener(new OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    }

    });

    OnClickListener就是android系统所约好的接口,然后在我们写的应用程序中传入回调对象,这样就可以达到接口统一,实现不同的效果。

    展开全文
  • java接口接口回调

    2021-03-05 22:23:34
    0、 java 接口概念一直对 java 接口概念比较模糊,因为平时的学习相对简单,没有用上,所以就很模糊。最近想用了,却发现搞不懂。所以想练习一下,加深对 java 接口的理解。java 接口概念: java 接口是一种抽象的...

    0、 java 接口概念

    一直对 java 接口概念比较模糊,因为平时的学习相对简单,没有用上,所以就很模糊。最近想用了,却发现搞不懂。所以想练习一下,加深对 java 接口的理解。

    java 接口概念: java 接口是一种抽象的类型。里面定义了方法的名字,但是没有实现。interface Animal {

    public void eat();

    public void travel();

    }

    “接口感觉就是一些类似的事物共有的域或方法,就像有一个接口 Animal,里面有个方法eat,然后你每一个动物的类,都去实现这个接口,因为每个动物都有各自的饮食方法,这样就增加了代码的复用性,不要再每一动物类里都要重新想一个名字来定义 eat。——来自“百度知道、菜鸟教程”

    1、接口的作用

    但是我认为上面的解释只给出了 java 接口中很小很小的作用,或者说不能体现“接口”这两个字的含义。关于接口,我是这样理解的,举一个比较形象的例子:小明数学比较好,可以计算两数相加,其方法为 add(int a, int b); 小红就不行了,数学比较差,自己做不来。但是数学老师又给小红布置了数学作业,而且明天必须要交作业。假如你是小红,你会怎么办?当然是求助小明啊!让小明来帮小红做作业。虽然小明数学好,但是小红求助小明的话小明会愿意帮小红吗?要是小明不愿意帮小红而且还鄙视小红,小红得多尴尬啊。class XiaoMing {

    private int add(int a, int b) {

    // 小明很聪明,知道怎么算,但是这个方法是私有的,不告诉其他人是怎么算的

    return a + b;

    }

    }class XiaoHong {

    private int add(int a, int b) {

    // 小红就比较笨啦,看到问题脑子一片浆糊。。不知道怎么算

    return ??;

    }

    public int write() {

    //    都不会算啊,怎写得出答案嘛

    return ??;

    }

    }

    这是已经深夜 22:00 了,小红终于拉下了脸面,通过 QQ 向小明发起了求职。没想到小明倒是懂得怜香惜玉,还赶紧安慰小红说“我愿意帮你”。因为时间紧迫,小明已经没有时间教小红怎么做了,他对小红说道:“我给你一个接口,你告诉我题目,我直接返回给你答案”。说完,小明赶紧定义了一个接口。interface Helper {

    public int output(int a, b);

    }

    小明定义好了接口,那么接口中的方法谁来实现呢?当然是小明啊,是时候表演真正的技术了。class XiaoMing implements Helper{

    private int add(int a, int b) {

    // 小明很聪明,知道怎么算,但是这个方式是私有的,不告诉其他人是怎么算的                return a + b;

    }

    @Override

    public int output(int a, int b) {

    // 小明在接口中调用自己的计算方法,然后返回计算结果

    return add(a, b);

    }

    }

    小明实现了这个接口,赶紧告诉小红,并教小红如何使用。class XiaoHong {

    // 小红为了使用小明的接口,定义了一个接口变量

    private Helper helper;

    // 并且通过传入的 helper 实例化

    public void setHelper(Helper helper) {

    this.helper = helper;

    }

    private int add(int a, int b) {

    // 小红有了 helper, 告诉 helper a 和 b 的值,让 helper 返回结果

    return

    helper.output(a, b);

    }

    }

    所以,小红要做的事就是把 helper 设置成小明,从而通过小明给出答案public class Test1 {

    public static void main(String[] args) {

    XiaoMing xiaoMing = new XiaoMing();

    XiaoHong xiaoHong = new XiaoHong();

    xiaoHong.setHelper(xiaoMing);

    int result = xiaoHong.add(1, 2);

    System.out.println(result);

    }

    }

    输出结果:3

    小红并没有计算的能力,但是却可以给出运算结果,这就是接口的作用。所以,接口可以用在这个情况:

    1、功能模块 B 想要使用功能模块 A 的功能,那么 A 可以给出一个接口,让 B 来调用。

    以上就是我对 JAVA 接口的一种理解。

    2、 JAVA 接口回调

    还不理解,就是 return 吗?

    展开全文
  • Java中的接口回调实例

    2021-02-12 09:42:11
    定义:/*** @author Administrator* @project: TestOne* @package: PACKAGE_NAME* @date: 2018/11/30 0030 15:42* @brief: 郭宝**/public class Person {/*** 自定义一个接口**/public interface ...

    定义:

    /**

    * @author Administrator

    * @project: TestOne

    * @package: PACKAGE_NAME

    * @date: 2018/11/30 0030 15:42

    * @brief: 郭宝

    **/

    public class Person {

    /**

    * 自定义一个接口

    **/

    public interface OnNameChangeListener{

    //接口中的抽象函数,并携带数据

    void onNameChange(String name);

    }

    /**

    * @param name

    * @param onNameChangeListener 传入实现了该接口的子类对象

    **/

    public void setName(String name,OnNameChangeListener onNameChangeListener){

    if (onNameChangeListener!=null){

    //调用接口中的抽象函数

    onNameChangeListener.onNameChange("你好,"+name);

    }

    }

    }

    调用:

    /**

    * @author Administrator

    * @project: TestOne

    * @package: PACKAGE_NAME

    * @date: 2018/11/30 0030 15:39

    * @brief: 郭宝

    **/

    public class mian {

    public static void main(String[] a){

    //实例化Person,并设置名称,传入实现OnNameChangeListener接口的子类对象

    new Person().setName("郭宝", new Person.OnNameChangeListener() {

    @Override

    public void onNameChange(String name) {

    System.out.println(name);

    //你好,郭宝

    }

    });

    }

    }

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

    展开全文
  • java设计——接口回调

    2021-02-12 09:42:33
    一、什么是接口回调网络上有很多关于接口回调技术的文章,但是看来看去,都是一些专业术语,这指针那指针的,初学者要看三四篇文章估计才能明白,今天我就用大白话给大家介绍什么是接口回调如果你还不懂java接口,还是先去...
  • Java接口回调机制详解

    2021-02-12 13:54:46
    一、前言最近在看android fragment与Activity进行数据传递的部分,看到了接口回调的内容,今天来总结一下。二、回调的含义和用途1、什么是回调?一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为...
  • Kotlin使用Java回调接口

    2021-03-09 09:45:59
    我有一个WebView.我想打电话public void evaluateJavascript(String script, ValueCallback ...这是ValueCallback接口:public interface ValueCallback {/*** Invoked when the value is available.* @param val...
  • 1.微信支付异步回调接口@SuppressWarnings("static-access")@RequestMapping("callback")@ResponseBodypublic Object callback(HttpServletRequest request,HttpServletResponse response) throws Exception{...
  • 回调一直是一个JAVA中很重要的概念,应用场景:A.class需要使用B.class的方法,然后A还需要在B的方法执行完毕后,作出对应反应,即在B的方法中还需要回调到将它new出来的A的方法。为了方便理解,我们用到接口,做个...
  • 此机制称为回调Java不支持函数指针。因此我们不能实现相同的方向。但是使用接口,我们可以很容易地实现相同的目的。在下面的示例中,单击按钮时我们进行了回调。参见步骤-使用单个方法创建接口ClickEventHandler ...
  • java接口回调

    2021-03-18 00:00:37
    java接口回调原理网上已经有很多生动形象的例子说明了,在此总结一下个人的理解:类A调用类B的方法b(),类B再回调类A的方法a(),其中方法a()是定义在接口中的,由类A来实现。这是一个双向调用的过程,用下面的类图...
  • java接口回调的经典使用案例内容简介:接口回调的理解及需要关注的问题接口回调一般常规用法接口回调简洁用法接口回调的意义接口回调简介:简单的说接口回调就是:调用者A类访问了被调用者B类中的M方法.这个M方法在执行...
  • 开发Android已有两年了,说来惭愧,回调虽然随处可见,并且网上关于回调函数和接口回调的内容很多,可一直没弄明白,总结不明白的原因如下:1、java接口定义以及向上转型是理解回调的基础;使用接口的核心原因:...
  • 理解Java接口回调

    2021-02-26 14:40:32
    初步认识:实现步骤:1、创建一个回调接口。2、创建一个回调对象实现回调接口。3、创建一个控制器对象,将回调对象作为参数传给控制器对象,控制器对象负责检查某个场景是否出现或某个条件是否满足,当满足时,则调用...
  • //接口回调理解:先创建好接口,需要使用的时候用匿名内部类实现接口,就叫接口回调,以下是我设计的程序。package callback;import java.util.ArrayList;import java.util.List;import java.util.Scanner;//接口...
  • onclick,onfocus,onload,...我们这里介绍利用java接口实现回调的方法。回调是一种双向的调用模式,例如我们要调用B的一个特定的方法,B在执行完又要调用A的一个方法,而这个A(或者说A的这个方法)是由我们自己...
  • Java回调接口

    2021-02-27 08:27:45
    等等诸如此类的方法吧, OK,针对这种需要多态的应用场景,我们的接口自然而然地就要上了,我们可以把回调这一行为抽象出来,让所有要调用b()方法的类都去实现这个抽象。 场景:A,C,D都有一个方法需要B的b()方法,...
  • java 如何写回调方法

    2021-03-09 16:06:44
    展开全部publicclassCaller{publicMyCallInterfacemc;publicvoidsetCallfuc(MyCallInterfacemc){this.mc=mc;}publicvoidcall(){this.mc.method();}}接口636f707962616964757a686964616f31333335336530publicint...
  • 1. 引言在计算机程序设计中,回调函数,简称回调(Callback),是指通过函数参数传递到其他代码的,某一块可执行代码的引用。这一设计允许了底层代码调用在高层定义的子程序...本文将介绍 Java 实现回调的四种写法:反...
  • 文章目录前言一、回调简单理解二、Java中用接口实现回调1.引入库2.读入数据总结 前言 本文是作者在学习接口回调时看到 https://blog.csdn.net/fengye454545/article/details/80198446 帖子中内容后,对其进行的理解...
  • 一、回调的含义和用途1. 什么是回调?一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类:同步调用、异步调用和回调。同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的函数名来...
  • java 接口回调实例详解首先官方对接口回调的定义是这样的,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法。这样听起来有点绕,我们可以这么理解接口回调:比如...
  • 解析Java接口回调机制

    2021-03-13 15:16:32
    回调(callback)是 Java中很重要的一个概念,我们在学习Spring、Hibernate等计算框架时其实已经为Java回调机制的学习埋下了伏笔。我们都知道控制反转(Inversionof Control,IoC),它是一个重要的面向对象编程的法则,...
  • Java接口回调

    2021-03-10 05:02:12
    回调的含义和用途什么是回调?一般来说,模块之间都存在一定的调用关系,从调用方式上看,可以分为三类:同步调用、异步调用和回调。同步调用是一种阻塞式调用,即在函数A的函数体里通过书写函数B的函数名来调用之,...
  • java接口回调的原理

    2021-03-04 02:47:57
    (1)回调接口tellAnswer(int answer),即学生回答完毕问题之后,老师要做的事情 (2)问问题方法askQuesTIon(),即向学生问问题 接着定义一个学生接口,学生当然是解决问题,但是接收一个Callback参数,这样...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 232,497
精华内容 92,998
关键字:

java回调接口怎么写

java 订阅