Java内部抽象类的匿名类初始化

来源:互联网 发布:q扫雷软件 编辑:程序博客网 时间:2024/05/29 02:02

      说在前面的话,以前写过一次这个变态代码,后来重构,把那个new的语法简化了,最近又要整,差点都想不起来了,留个文档把

1、下面这个案例更变态,抽象类还有一个个泛型类:首先内部抽象类的定义:

/* * * Created by stone * * */package net.stoneapp.quanshi.qsand.application;import android.app.Application;import android.util.Log;import android.widget.Toast;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import net.stoneapp.quanshi.qsand.utils.AndUtils;import cn.jpush.android.api.JPushInterface;import retrofit2.Call;import retrofit2.Response;import rx.Subscriber;/** * Created by dengel on 15/12/28. */public class QsandApplication extends Application {    AndUtils mAndUtils;    @Override    public void onCreate() {        super.onCreate();        mAndUtils = new AndUtils(this);        JPushInterface.setDebugMode(true);        JPushInterface.init(this);    }    public AndUtils getAndUtils(){        return mAndUtils;    }    public abstract class JSONSubscriber extends Subscriber<JSONObject> {        @Override        public void onCompleted() {        }        @Override        public void onError(Throwable e) {            if(e.getMessage()!=null) {                Log.i("Subscriber Error", e.getMessage());                Toast.makeText(QsandApplication.this, e.getMessage(), Toast.LENGTH_LONG).show();            }            e.printStackTrace();        }    }    public abstract class Callback<T> implements retrofit2.Callback<T>{        @Override        public void onResponse(Call<T> call, Response<T> response) {            int status = response.code();            if(status>=400 && status<500){                JSONObject jsonObj =  (JSONObject)JSON.parse(response.errorBody().toString());                Toast.makeText(QsandApplication.this,jsonObj.getString("detail"),Toast.LENGTH_SHORT).show();            }        }        @Override        public void onFailure(Call<T> call,Throwable t) {            if(t.getMessage()!=null) {                Log.e("Callback Error:", t.getMessage());                Toast.makeText(QsandApplication.this, t.getMessage(), Toast.LENGTH_LONG).show();            }            t.printStackTrace();        }    }}

2、匿名类初始化方法:

public void postVerifyCode(View view){        mMobilelView.setError(null);        String mobile = mMobilelView.getText().toString();        boolean cancel = false;        View focusView = null;        if (TextUtils.isEmpty(mobile) || !StringUtils.isMobileNumber(mobile)) {            mMobilelView.setError(getString(R.string.error_invalid_mobile));            focusView = mMobilelView;            cancel = true;        }        if (cancel){            focusView.requestFocus();        }else {            showProgress(true);            Services.AuthService service = Services.getRetrofit().create(Services.AuthService.class);            User user = new User();            user.setMobile(mobile);            final QsandApplication qsandApplication = (QsandApplication)getApplication();            service.postVerifyCode(user).enqueue(qsandApplication.new Callback<User>(){//重点就在这句new的语法                @Override                public void onResponse(Call<User> call, Response<User> response) {                }            });        }    }


0 0