百度上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);
}
}
泛型接口:
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就是参数中传递过来的对象了。 } });