Java回调函数

来源:互联网 发布:js event button 编辑:程序博客网 时间:2024/06/06 08:56

回调函数在网上的讲解比较多,也是nodeJs里比较高级的特性,在Java里的回调函数就是指在服务端的函数可以调用客户端的代码,某百科的定义回调函数是“回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。”
关键就是将函数本身的引用传送到另一个函数,在Java中我们函数的调用是通过引用,所以我们会采用将当前对象本身的引用传递到另一个函数内部去执行。this关键字即是当前对象的引用。
我们可以写个demo,我们模拟server回调client。

class Client {    Server server = new Server();    // 2   调用服务    public void callServer(String params) {        System.out.println("client start to call server ...");        sleep(1000);        // 3 --- this传递当前对象引用        server.state(this, "params come from client");    }    // 6    被回调的函数    public void backFunction(String params) {        System.out.println("client called by server ,params : " + params);    }    public static void sleep(int millions) {        try {            Thread.sleep(millions);        } catch (Exception ex) {            ex.printStackTrace();        }    }}class Server {    // 1   模拟server启动    static {        System.out.println("server starting...");        sleep(1000);        System.out.println("server started...");    }    // 4    接收客户端引用    public void state(Client client, String params) {        System.out.println("server called by client, params : " + params);        sleep(1000);        System.out.println("server will call client...");//      client.backFunction("server's params");   方式1        callBack(client);    }    // 5   回调函数    public void callBack(Client client) {        System.out.println("server call client ...");        sleep(1000);        client.backFunction("server call client params");    }    public static void sleep(int millis) {        try {            Thread.sleep(millis);        } catch (InterruptedException e) {            e.printStackTrace();        }    }}// 测试        Client client = new Client();        client.callServer("micro's client");

执行结果:

server starting...server started...client start to call server ...server called by client, params : params come from clientserver will call client...server call client ...client called by server ,params : server call client params

我们client首先用public void callServer(String params)调用Server,在内部调用server的时候将自身对象用this关键字传递到server,因此server内部也可以通过client.backFunction(“server call client params”);回调到client的函数,backFunction即是被回调的函数,callback称作毁掉函数。

0 0
原创粉丝点击