如何抽取代码后,在父类实例化泛型的问题

来源:互联网 发布:js获取回调函数返回值 编辑:程序博客网 时间:2024/05/18 00:03

代码背景:在物流项目中,有大量的action类中需要使用模型驱动,所以会抽取公共部分代码,

但由于action类要实现ModelDriven<T>接口,抽取成BaseAction里面的泛型T如何在子类实例化的问题。

/** * 抽取Action的公共代码 ,简化开发 * * @author dijia478 * @version 1.0,2017-10-30 11:16 */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();            System.out.println("模型构造失败...");        }    }}
这段代码是通过构造器来实例化泛型T的,子类要继承BaseAction,加载子类的时候,子类构造默认会调用supper();,所以会将泛型T实例化

原创粉丝点击