以struts2中的action的模型驱动为例,由于一个模块中模型驱动使用的较为频繁,所以为了避免代码的重复使用,进行代码的重构优化
/**
* 抽取 Action的公共代码 ,简化开发
* 以Area模块驱动为例
* @author itcast
*
*/
public abstract class BaseAction<T> extends ActionSupport implements
ModelDriven<T> {
// 模型驱动
protected T model;
@Override
public T getModel() {
return model;
}
// 构造器 完成model实例化
public BaseAction() {
// 构造子类Action对象 ,获取继承父类型的泛型
// AreaAction extends BaseAction<Area>
// BaseAction<Area>
Type genericSuperclass = this.getClass().getGenericSuperclass();
// 获取类型第一个泛型参数
ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
Class<T> modelClass = (Class<T>) parameterizedType
.getActualTypeArguments()[0];
try {
model = modelClass.newInstance();
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
}
}