首先,查看别人和结合自己理解的interface:
1,Java是继承机制的,接口可以实现多个,可以弥补这个缺点,提高各个类的拓展性;
2,接口回调,传值用的,灵活的应用可以使代码飘逸多变,这个也是一直纠结于接口理解的原因。
这边只想简单说说最基本的接口回调,
首先定义一个,里面含有某抽象方法,方法里面需要参数;
其次在某个位置调用接口中的这个方法,对参数进行复制;
最后在某个类实现接口,因为是接口中的方法是抽象方法需要被重写,得到接口中参数,获取参数中的值,
上面三步骤看起来貌似很简单,第一次实现起来遇到了各种各样的小问题。比如第二步的对参数进行赋值,怎么个赋值法,其实需要定一个方法,方法的参数是接口类型的,方法中调用 参数.接口中的方法,赋上值;然后这个方法得被调用,才能执行,执行之后才能对接口中抽象方法进行赋值。
这个时候我就到了需要获取接口中值得这个类,第一步是实现接口重写接口中的方法。第二部定义一个对接口方法参数赋值的类的对象,调用对象中的为接口中抽象方法赋值的方法,就是我们上一段中提到的执行这个方法;调用这个方法的时候因为需要一个接口类型的参数,这个时候直接传入this,这个this可能有些人理解不了,其实本身是需要传入接口类型的对象,由于我们当前的类已经实现了接口,所以我们直接传入this即可。
下面给出一个最简单的小例子:
1:定义接口
public interface ZhongCallBack { public void getName(String name); }
2:为接口中方法的参数赋值:
public class Mom { public void setName(ZhongCallBack zhongCallBack){ String name = "zhonghuibin"; zhongCallBack.getName(name); } }
3:获取接口传过来的值:
public class Zhonghuibin implements ZhongCallBack{ private Mom mom; public Zhonghuibin(Mom mom){ this.mom =mom; } private void aa(){ mom.setName(this); } @Override public void getName(String name) { String Name = name; } }
下面再给出一个在项目中实战的例子:
public class ApiRequestFactory {
Class 1:
public interface HttpCallBackListener { void onSuccess(String response, String url, int id); void failure(Call call, Exception e, int id);
public static void get(final Context context, final String url, Mapparams ,
final HttpCallBackListener httpCallBackListener, boolean isShowDialog){ init(context); if (isShowDialog) { if (loadingDialog == null) { loadingDialog = new SpotsDialog(context,"正在加载数据"); } loadingDialog.dismiss(); loadingDialog.show(); } OkHttpUtils .get() .url(ApiUrl.URL+url) .params(params) .build() .execute(new StringCallback() { @Override public void onError(Call call, Exception e, int id) { if (loadingDialog != null) { loadingDialog.dismiss(); loadingDialog = null; } ToastUtils.disPlayShort(context, "网络加载出现异常"); if (httpCallBackListener !=null) { httpCallBackListener.failure(call, e, id); } } @Override public void onResponse(String response, int id) { if (loadingDialog != null) { loadingDialog.dismiss(); loadingDialog = null; } if (response.contains("用户认证系统")){ ToastUtils.disPlayShort(context, "网络连接已断开,请检查网络连接"); return; } if (httpCallBackListener !=null) { httpCallBackListener.onSuccess(response,url, id); } } });
}
Class 2:
public void getBuildList() { getCompanyList(BookingMeetingRoom.this, "m=Androidstation&a=getbuildinglist", share.getCompanyId(), new ApiRequestFactory.HttpCallBackListener() { @Override public void onSuccess(String response, String url, int id) { //下载成功的接口回调 } @Override public void failure(Call call, Exception e, int id) { //下载失败的接口回调 } },true); }
这上面这个例子是在当前项目中直接拷出来的,是一个经过封装的下载,下载成功和失败之后的接口回调,未经过修改,
这里面和上面简单小例子的不同之处在于把接口直接放在了,给接口方法参数赋值的类里面,就是上面的12步写在了一起,这
样赋值起来简单通俗一点。