泛型
泛型是一种高阶抽象,是将数据的类型参数化。是Java语言的“语法糖”——编码时有泛型,运行时没有泛型,都是Object。
应用场景
泛型类。适用于容器类型,如Bag、List。Java里面有Future<T>, List<T>
泛型接口。
泛型方法。
好处
类型安全。编码时已经限定放入什么,就取出什么,没有ClassCastException。
代码重用。
如何在运行期获取实际类型信息
运行期获取泛型类对应实际类型信息,
/**
* 获取具体Handler处理的泛型类
* @return
*/
private Class<T> getConcreteHandlerGenericClass(){
return (Class <T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
用途:模板方法模式,父类需要将json格式字符串反序列化成具体的对象,交给子类处理。
abstract class AbsUpReqBusiHandler<T>{
/**
* 自定义处理
* @param t
* @return
*/
protected abstract String customHandle(T t);
public String handle(String jsonParam){
Class<T> tClz = this.getConcreteHandlerGenericClass();
T t = JSON.parseObject(jsonParam, tClz);
String result = this.customHandle(t);
return result;
}
}
public class ReportCameraStatusHandler extends AbsUpReqBusiHandler<CameraStatus>{
@Override
protected String customHandle(CameraStatus CameraStatus) {
CameraStatus cData = new CameraStatus();
return null;
}
}