java接口回调

2018-07-16  本文已影响0人  瀚海星云plus

java的接口回调原理网上已经有很多生动形象的例子说明了,在此总结一下个人的理解:类A调用类B的方法b(),类B再回调类A的方法a(),其中方法a()是定义在接口中的,由类A来实现。这是一个双向调用的过程,用下面的类图来加以说明。

Callback.png

1. 创建一个接口:

public interface CallBack{
    public void finish(String result);
}

接口定义了一个回调方法finish(),由类Manager实现,供类Employee回调。

2. 创建Manager类实现上面的接口

public class Manager implements CallBack{
    
    private Employee employee;
    
    public Manager(Employee employee){
        this.employee = employee;
    }
    
    public void assign(){
        System.out.println("to finish this work");
        employee.get(Manager.this);
    }
    
    public void finish(String result){
        System.out.println("well done..." + result);
    }
}

Manager类是依赖Employee类的,它需要调用Employee类的get()方法,因此在Manager构造方法中将Employee对象作为参数传进来。之后在assign()方法中去调用employee的get()方法。最后记得要实现接口的回调方法finish();

3. 创建Employee类:

public class Employee{
    
    public void get(CallBack callback){
        
        new Thread(new Runnable(){
        public void run(){
            System.out.println("so easy!");
            callback.finish("finish!");
        }
    }).start();
        
    }
}

get()方法参数是接口,使用的时候直接传入Manager.this就可以了。在方法体中单独开启了一个线程,用来执行一些耗时的操作,这里只是简单的执行回调方法finish();

4. 最后编写一个类来测试一下

public class Main{
    public static void main(String[] args){
        
        Employee employee = new Employee();
        Manager manager = new Manager(employee);
        
        manager.assign();
    }
}

在控制台中输出如下:


output.png
上一篇 下一篇

猜你喜欢

热点阅读