您的位置:首页 > 其它

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

2017-09-27 12:45 267 查看
在遇到需要将几个功能的中的相同代码进行抽取到公共类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的初始化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: