通过反射得到model的真实类型

来源:互联网 发布:淘宝店铺营销推广 编辑:程序博客网 时间:2024/05/21 11:29

在遇到需要将几个功能的中的相同代码进行抽取到公共类BaseAction的时候:遇到泛型不能继承时,需要通过反射

得到真实的类型。如在抽取用户user类和部门Department类中的公共代码时:


public abstract class BaseAction<T> extends ActionSupport implements ModelDriven<T>{


protected T model; //这里需要初始化,但是泛型的类型不能确定。

public BaseAction(){

try {
//通过反射得到真实的类型
ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();
Class<T> clazz = (Class<T>) pt.getActualTypeArguments()[0];
//通过反射得到model的真实类型
clazz.newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
public T getModel() {
return model;
}

}

这里的泛型 T 在用户User类和部门Department类继承时,protected T model; 这里model需要初始化,但是泛型的类型不能确定。

于是就可以通过反射的方式来进行model的初始化。

阅读全文
0 0
原创粉丝点击