反射动态创建泛型类中泛型对应类的实例

 

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

	private T model;
	@Override
	public T getModel() {
		
		return model;
	}	
	//****给model创建对象****
	public BaseAction(){
		System.out.println("baseAction抽象类的构造方法,抽象类可以有构造方法,但不能创建实例,抽象类的构造方法存在的意义是在创建子类对象的时候,进行一定的初始化工作,如此处定义的构造方法便是这个意义");
		try {
			//System.out.println("BaseAction==============");
			
			//使用反射创建model对象
			//1.获取子类类型: StandardAction.class
			//this:当前运行时的实例
			//System.out.println(this.getClass()+"====");
			Class clz = this.getClass();//this指的是当前运行的实例(子类实例)
			
			/*
			private int a;   				TypeVariable
			private int[] a;				GenericArrayType
			private Student a;				WildcardType 
			private List<Student> a;		ParameterizedType
			
			*/
			//2.获取类的泛型父类 : BaseAction<Standard>
			//Type: 是Java里面所有类型的父接口
			Type type = clz.getGenericSuperclass();//获取泛型父类,必须用该方法,此处的泛型父类不是指当前的类,而是具体继承的BaseAction<Standard>,当前类为BaseAction<T>泛型尚未确定
			
			//3.把Type转换为具体的类型: BaseAction<Standard>
			ParameterizedType pt = (ParameterizedType)type;//将泛型父类转换为具体的那种类型
			
			//4.从具体类型中获取泛型  : Standard.class
			//System.out.println(pt.getActualTypeArguments()[0]);
			
			Class modelClass = (Class)pt.getActualTypeArguments()[0];//获取具体泛型类Action中的泛型
			
			//5.创建泛型类的的对象
			model = (T) modelClass.getConstructor().newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值