1. 程式人生 > >OK回撥介面資料型別-泛型回撥

OK回撥介面資料型別-泛型回撥

在OK請求完成之後:

handler.post(new Runnable() {
    @Override
public void run() {
        Class<Object> genericUtil = GenericUtil.getGenericUtil(okCallback.getClass());//運用GenericUtil類返回泛型資料
Object o = GsonUtil.getGsonInstence().fromGson(string, genericUtil);//Gson解析
okCallback.onSuccess(o);   //返回資料
}
});
介面:
public interface OKCallback<T> {
    void onSuccess(T t);
void onFalsed(Exception e);
}
接收資料,實現的介面:
public abstract class OKEntityCallback<T> implements OKCallback<T>{

    protected Class<T> cla;
public OKEntityCallback() {
        this.cla = GenericUtil.getGenericUtil(this
.getClass()); } }
資料回撥,泛型轉換:
public class GenericUtil {
    public static <T> Class<T> getGenericUtil(Class<?> cla){
        Type genericSuperclass = cla.getGenericSuperclass();
Class<T> result = null;
if(genericSuperclass instanceof ParameterizedType){
            ParameterizedType 
parameterizedType = (ParameterizedType) genericSuperclass; Type[] types = parameterizedType.getActualTypeArguments(); result = (Class<T>) types[0]; } return result; } }
最終回撥資料:
OKHttpUtil.getInstence().get(path, new OKEntityCallback<OKTestBean>() {   //泛型先加上,再重寫回家介面的方法
    @Override
public void onSuccess(OKTestBean okTestBean) {
        Log.e("Test",okTestBean.toString());
}

    @Override
public void onFalsed(Exception e) {
        Log.e("Test","NO");
}
});