Android 泛型使用

百度上copy的泛型基本使用方法

使用泛型不管是类,方法还是接口都需要用<T>声明该类,方法或接口是个泛型

泛型类:
public class FanXingLeiDemo<T> {//这里是泛型,可以传任意的参数
private T obj;
public T getObj() {
return obj;
}
public void setObj(T obj) {
this.obj = obj;
}
}
实现:
public class FanXingMain {
public static void main(String[] args) {
FanXingLeiDemo<String> fxd = new FanXingLeiDemo<String>();
fxd.setObj("hahaha");
System.out.println(fxd.getObj());
}

}


泛型方法:
public class FanXingMethod {
public <T> void show(T t)
{
System.out.println(t);
}
}
实现:
public class FangXingMethodMain {
public static void main(String[] args) {
FanXingMethod fxm = new FanXingMethod();
fxm.show(100);
fxm.show("shshh");
fxm.show(true);
}

}


3
泛型接口:
public interface Inter<T> {
public abstract void show(T t);
}
实现接口:
public class InterImpl<T> implements Inter<T> {
@Override
public void show(T t) {
// TODO 自动生成的方法存根
System.out.println(t);
}
}
实例化:
public class InterMain {
public static void main(String[] args) {
Inter<String> in = new InterImpl<String>();
in.show("hahah");
}

}


下面是根据该基本用法使用的案例:


需求:项目中很多地方会用到删除某个item,并向服务端发送删除请求,在删除的时候我们需要有一个确认删除提示框。

分析:由于每个删除的对象模型都不一样,点击操作的对象各不相同。要想写一个通用的方法。利用泛型就是一个非常好的选择。


首先我们实现一个通用的dialog布局,然后提示语通过方法传参,然后就是利用泛型接口对对象进行回调,从而实现点击时直接用到各自需要的对象。

方法:

public static <T> void showMessageDialog(Context context, String message, final T t, final OnBtnClickListener<T> callback) {
        LayoutInflater factory = LayoutInflater.from(context);
        final LinearLayout dialogView = (LinearLayout) factory.inflate(
                R.layout.dialog_custom_alert, null);
        final TextView msg = (TextView) dialogView
                .findViewById(R.id.tv_message_detail);
        // 确定
        TextView submitBtn = (TextView) dialogView
                .findViewById(R.id.tv_submit_ok);
        // 取消
        TextView cancelBtn = (TextView) dialogView
                .findViewById(R.id.tv_submit_cancel);
        msg.setText(message);
        // 对话框
        final Dialog dialog = new Dialog(context, R.style.MyDialogStyle);
        dialog.show();
        dialog.getWindow().setContentView(dialogView);
        submitBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (callback != null) {
                    callback.onOkClick(t); // 点击确认按钮,将对象回调
                }
                dialog.dismiss();
            }
        });
        cancelBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                if (callback != null) {
                    callback.onCancelClick(t); // 点击取消按钮,将对象回调

                }
                dialog.dismiss();
            }
        });
}

接口定义

public interface OnBtnClickListener<T> {
    void onOkClick(final T t);
    void onCancelClick(final T t);
}

这样只需要在需要弹出提示框的地方调用该方法,而不用每一个对象都去定义自己的实现方法了。

// model是一个 Model 对象

showMessageDialog(mContext, "您确定要执行这个操作么?" model, new DialogUtils.OnBtnClickListener<Model>() {
    @Override
    public void onCancelClick(Model model) {
        //这里的model就是参数中传递过来的对象了。
    }

    @Override
    public void onOkClick(Model model) {
        //这里的model就是参数中传递过来的对象了。

    }
});


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值