提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
回调的本质:A类中的a方法调用B类中的b方法,b方法在运行时调用A类中的a2方法,这就是回调。
举个例子:
现在经理A觉得某个员工x在偷懒,他给手下的员工B发布了一个任务,让B去调查,B最后将调查结果返回给A。
对于经理A:发布任务(issueCall),获得结果(result);
对于员工B:处理任务(doSomething),通知领导结果(result)
一、同步回调
废话不多说,直接上代码!
首先创建一个回调接口
/**
* 首先创建一个回调接口
*/
public interface CallBack {
void callResult(String result);
}
创建员工的总接口(可以省略)
/**
* 创建员工的总接口(可以省略)
*/
public interface EmployeeInterFace {
void doSomething (CallBack call);
}
经理类实现回调接口,同时自带发布任务的方法
/**
* 经理类实现回调接口,同时自带发布任务的方法
*/
public class Manager implements CallBack {
@Override
public void callResult(String result) {
System.out.println("经理得知的结果是:"+ result);
}
public void issueCall(EmployeeInterFace employee){
System.out.println("经理发布一个任务,让某员工去调查员工x为什么偷懒");
//员工B执行经理A发布的方法
employee.doSomething(Manager.this);
System.out.println("经理处理额外的事情");
}
}
员工B执行了方法后,调用传入参数中的回调方法,吧结果返回给经理A
/**
* @Author luck
* @Motto 仰望星空,俯视大地
* 员工执行了方法后,调用传入参数中的回调方法,吧结果返回给经理A
*/
public class Employee implements EmployeeInterFace {
@Override
public void doSomething(CallBack call) {
System.out.println("员工调查中~~~~~~");
String result = "我去调查员工x,发现他不是偷懒,只是个嘤嘤怪";
//我要把调查结果告诉老板
call.callResult(result);
}
}
测试类
/**
*测试类
*/
public class TestCallBack {
public static void main(String[] args) {
Manager manager = new Manager();
Employee employee = new Employee();
manager.issueCall(employee);
}
}
实现结果如下
经理发布一个任务,让某员工去调查员工x为什么偷懒
员工调查中~~~~~~
经理得知的结果是:我去调查员工x,发现他不是偷懒,只是个嘤嘤怪
经理处理额外的事情
二、异步回调
由上面的代码可以了解,经理A在得到结果之前,是不能去做其它事情的,这显然不合理,这就有了异步回调。
代码仅针对Manager这个类做修改,采用线程的方式实现异步
public class Manager implements CallBack {
@Override
public void callResult(String result) {
System.out.println("经理得知的结果是:"+ result);
}
public void issueCall(EmployeeInterFace employee){
System.out.println("经理发布一个任务,让某员工去调查员工x为什么偷懒:");
//任务分派后不影响我做其它事情,也就是异步回调
new Thread(new Runnable() {
@Override
public void run() {
employee.doSomething(Manager.this);
}
}).start();
System.out.println("经理处理额外的事情");
}
}
总结
上述内容对java回调做了简单示例,如果觉得有帮助,可以友情点赞^^