作为长期从事开发人员来说,一门高效的简洁开发语言,在开发中的体验感受远远是不一样的。没有对比,就没有伤害。
我在可以用lambda 表达式,轻松搞定在java 使用的接口回调问题
在java 中,
public interface ResultListener {
void onSuccess();
void onFail();
}
public static void order(String orderId,final ResultListener listener) {
HttpHelper.getInstance().order(orderId, new TestCallBack() {
@Override
public void onResponse(String response, int id) {
try {
JSONObject jsonObject = new JSONObject(response);
if (HttpConfig.SUCCESS == jsonObject.optInt("status")) {
listener.onSuccess()
} else {
listener.onFail()
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Call call, Exception e, int id) {
super.onError(call, e, id);
listener.onFail();
}
});
}
Utils.order(orderId, new Utils.ResultListener() {
@ override
public void onSuccess() {
loadData(type)
}
@override
public void onFail() {
ToastUtils.showShortMsg("提交失败,请稍后再试")
}
})
在Kotlin 我们可以使用更加简洁的方式,实现上面的回调写法,写同样的逻辑如下:直接创建一个Kotlin 文件,这里类似与java 中的静态类,而且在异常处理中,我们自主性的处理异常,这样使用起来是不是很方便。
internal fun order(orderId:String,callBack:()->Unit,failCallBack:()->Unit){
HttpHelper.getInstance().order(orderId,object: TestCallBack{
override fun onResponse(response:String,id:Int) {
if (HttpConfig.SUCCESS == JSONObject(resonse).optInt("status")) callBack() else failCallBack();
}
override fun onError(call:Call, Exception e,id:Int) {
super.onError(call, e, id);
failCallBack();
}
})
}
oder(orderId,{
loadData(type)
},{
ToastUtils.showShortMsg("提交失败,请稍后再试")
})