关于java的回调方法

作者: 凌风x | 来源:发表于2018-05-04 10:53 被阅读7次

前言

As we know JS支持"方法作为函数参数",所以回调方法很容易实现,可是java并不支持。但在java式android编程中我们可以看到很多异步的回调。那么android是如何实现的呢?在此我们并不讨论类似RXJs、RXJava的新技术,只是用纯原生的java思想实现回调

知识点

接口、多态、异步、多线程、内部类

正文

直接上代码

package com.util.Super;

public class CallBackFnc {
    /**
     * 定义内部接口用于回调
     * @author wz
     *
     */
    interface Listener {
        void OnListen();//无参回调
        void OnListen(String s);//带参回调
    }

    class A implements Listener {
        static final String METHOD_ONE="方式一";
        static final String METHOD_TWO="方式二";
        static final String METHOD_THREE="方式三";
        String type="默认方式";
        public A(String type) {
            this.type=type;
        }
        /**
         * 问问题
         */
        public void Question() {
            
            System.out.println("[A]:向B问问题");
            
            //方式一
            new Thread(new Runnable() {
                public void run() {
                    System.out.println(METHOD_ONE);
                    //System.out.println("");
                    B b = new B();
                    b.answer(METHOD_ONE,5000,new Listener() {// 匿名内部类 android很多基于此                      
                        public void OnListen(String s) {
                            System.out.println("[A]:"+METHOD_ONE+"获取了答案:"+s);
                            System.out.println();
                        }
                        public void OnListen() {
                        }
                    });
                }
            }).start();
            //方式二
            new Thread(new Runnable() {
                public void run() {
                    System.out.println(METHOD_TWO);
                    B b = new B();
                    b.answer(METHOD_TWO, 3000, new A(METHOD_TWO));
                }
            }).start();
            
            //方式三
            System.out.println(METHOD_THREE);
            B b=new B();
            b.answer(METHOD_THREE, 1000, this);
            
            System.out.println("Question 执行完毕");
        }

        @Override
        public void OnListen(String s) {
            System.out.println("[A]:"+this.type+"知道答案了: " + s);
            System.out.println();
        }
        @Override
        public void OnListen() {

        }

    }

    class B {
        /**
         * 回答问题(耗时操作)
         */
        public void answer(String name,int time,Listener listener) {
            new Thread(new Runnable() {
                public void run() {
                    try {                       
                        //Thread.sleep(time);
                        System.out.println("[B]:"+name+"向我问问题,B思考了"+time+"毫秒");
                        listener.OnListen(name+",我是B的子线程");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }
   //测试
    public static void main(String[] args) {
        CallBackFnc cbf = new CallBackFnc();
        CallBackFnc.A a = cbf.new A("A from main");
        a.Question();
        System.out.println("main线程执行完毕");
    }
}

看一眼结果


测试结果

总结

多思考,多问问题,多动手

相关文章

  • 关于java的回调方法

    前言 As we know JS支持"方法作为函数参数",所以回调方法很容易实现,可是java并不支持。但在jav...

  • 关于Java回调方法的理解

    什么是回调方法 个人理解的回调是指在解决某个问题时需要两步操作,此时第一步操作可以看作是为了解决问题,第二步操作是...

  • Kotlin使用接口回调

    1.Java中的接口回调实现(支持多方法回调) 声明回调接口,初始化接口 使用接口回调(无参数) 使用接口回调(带...

  • Java 回调机制

    参考链接 Java回调机制解读 回调的思想 类A的a()方法调用类B的b()方法 类B的b()方法执行完毕主动调用...

  • js与native交互之JsBridge

    接上篇 JsBridge 1.使用方法 1.1,java调用js指定方法,并有回调: java调用callHand...

  • 回调-Java

    回调-Java 回调是在平常的工作中常常遇到的方法。在我们进行服务器编程或者一些方法调用的时候,我们会选择同步方法...

  • JNI回调java方法

    要回调java 类结构 第一步:获得java类的class 第二步:获得class的实例对象 第三步:调用Trac...

  • 使用 Java 8 的 CompletableFuture 实现

    使用 Java 8 的 CompletableFuture 实现函数式的回调 最近,在准备一个关于 Java 并行...

  • 关于java回调函数

    java中看回调函数,总是感觉别扭,写一个多看看。。 定义一个回调接口,不写实现在midMethod方法声明时将回...

  • Java 回调(callback)

    回调回调,是huitiao还是huidiao呢?哈哈,用输入法反正都打得出来。关于Java回调这个概念看了几...

网友评论

本文标题:关于java的回调方法

本文链接:https://www.haomeiwen.com/subject/uwpqlftx.html