Java回调是非常好用的一种手段,它可以用来传递数据并使代码有好的封装性。初学者可能对它不太了解,所以今天来看一下它的使用方法。
使用回调,分三个步骤:
1、创建回调接口ICallback,定义要回调的方法
2、创建类B,获取由外部传入的回调接口实现callbackImpl,在需要的地方调用回调方法
3、需要使用类B的类A,实现ICallback接口,根据类B的要求传入接口实现callbackImpl
上面的过程,实际应用中其实是因为类B需要回调接口,所以创建ICallback,不要弄混了因果关系。我们来看一个实例:
B是一个服务类,所有人都能使用B的服务。B提供帮你取外卖及取快递两个业务。
package com.ssw.callback;
public class B {
private OnGetListener iCallBack;
private boolean isRainning = true;
private boolean isSnowwing = false;
public static final int SEND_SUCCESS = 0;
public static final int NO_SEND_RAIN = 1;
public static final int NO_SEND_SNOW = 2;
public B(OnGetListener iCallBack) {//步骤2:获取接口实现
this.iCallBack = iCallBack;
}
public void getDelivery(String address){
if (isRainning) {
iCallBack.onGet(NO_SEND_RAIN);//调用接口方法
return;
}
if (isSnowwing) {
iCallBack.onGet(NO_SEND_RAIN);
return;
}
iCallBack.onGet(SEND_SUCCESS);
iCallBack.onPay(20);
}
void getFood(String name) {
if (isRainning) {
iCallBack.onGet(NO_SEND_RAIN);
return;
}
if (isSnowwing) {
iCallBack.onGet(NO_SEND_RAIN);
return;
}
iCallBack.onGet(SEND_SUCCESS);
iCallBack.onPay(30);
}
public interface OnGetListener {//步骤1:创建接口
void onGet(int status);//当前送货状态
int onPay(int money);//提醒客户需要付款
}
}
A是买家,会使用B来让它帮忙取外卖、取快递。
package com.ssw.callback;
import android.util.Log;
public class A {
private B mB;
public A() {
mB = new B(mLisenter);//步骤3:传入接口实现
}
public void buyGoods() {
mB.getDelivery("1号楼");
}
public void buyFood() {
mB.getFood("2号楼");
}
B.OnGetListener mLisenter = new B.OnGetListener() {//接口实现,可以在内部实现,也可以直接用class A直接实现接口
@Override
public void onGet(int status) {//根据当前状态,进行不同操作
if (status == B.NO_SEND_RAIN) {
Log.d("A", "下雨天伤心,不拿了");
} else if (status == B.NO_SEND_SNOW) {
Log.d("A", "下雪了,出去玩");
} else if (status == B.SEND_SUCCESS) {
Log.d("A", "小哥送到了,去开门");
}
}
@Override
public int onPay(int money) {//去付钱
Log.d("A", "I should pay " + money + " $");
return 0;
}
};
}
B中创建了回调接口和回调方法。A要使用B,就需要实现B中定义的接口。B在需要的时候如通知买家现在外卖的状态时,调用接口中的方法,用来通知买家,而买家根据B返回的状态进行不同的操作。
根据讲解及例子,相信你已经对回调有了一定了解。想要更加熟练的使用它,就需要你接下来在实际项目中去锻炼了。回调在每个项目中都必不可少,以实际Android系统来说,最经典的View.setOnClickListener(OnClickListener())就是回调。还有其它非常多地方使用了回调,用来通知外界当前的状态和需要进行的操作。