使用反射得到泛型的实际参数类型

昨天上课,开头讲得是反射,对于反射我感觉自己还是听懂的,至少在概念和原理上把握了反射,以前看过张老师的视频,张老师讲的非常好,不过可惜了,这次来培训,貌似张老师不叫我们,哎。。。遗憾呐。。。以前学过反射,但是还是缕一下思路,复习一下反射吧。

还是向上一篇博客那样,在接触一样新的东东之前,要问问自己三件事(1、这个东东是什么,或者什么是反射, 2,、这个东东能做什么 , 3、在企业里怎么用这个东东)搞清楚了这三个问题,你这东东才能有理论到实践无一不精通。。。

首先什么是反射?

反射就是将java类各个成分映射成相应的java类,这句很经典,一看到这句话估计你就能理解什么是反射啦,一个类中有构造方法,普通方法、成员变量,将它们分别映射成相应的java类,构造方法映射成Constructor类, 普通方法映射成Method类,成员变量映射成Field类,所以在查看Class API时, 能看到各种get打头的方法,返回值是相应的类。

其次反射能做什么?

反射能做什么?在回答这个问题之前,让我们想想以前我们在调用方法的时候,是不是先new出一个对象,然后早使用 (.)点号操作符调用相应的方法。这样调用方法的前提是类名已知,方法名已知。但是自己如果 实现一个框架的时候,就必须要使用反射技术, 框架是什么?打个比方好比盖一座房子,房子的样式千万种,当然不知道建具体哪一种,但是若是先给你一个搭建好了模型,让你在此基础上建立你想要建立房子的样式,岂不是很方便。而这个提前给你给你模式就是我们程序里的框架,框架的通用性的,所以框架不知道你具体想干什么? 比如创建一个类,框架不知道你想创建那个具体的类,所以你给定一个字符串代表类的名字, String className = “com.csdn.HelloWorld";这是框架就会使用反射为创建一个类,Class.forName(className).newInstance(); 这就创建了一个类,框架可以通过反射创建各种各样的类。

最后在企业里怎么使用反射技术?

随着后面的深入学习框架对反射的了解会更加深入,使用反射时就必须要了解反射的基类Class,这个类代表当前运行的类的字节码对象,我们知道在java源程序在被执行之前,首先要被编译成字节码文件,Class就是代表字节码对象,前面说了通过反射可以获得相应的java类,这些类都是从字节码对象身上得到的。

注意:我们知道一个类在内存之中的字节码只有一份,所以不论创建了多少这类的对象时,他们的字节码都是相同的,通过反射得到一位数组的父类是Object,所以只要数组维数相同,不管数组里有几个元素,他们的他们的字节码也是相同的。

反射使用步骤:

1、获得累的字节码

2、获得相应的类(是Constucutor, Method, Field)

3、调用方法生成对象或者获得参数类型或获得(设置)字段的值

例子:通过反射得到泛型的实际参数类型,这也是在上课没想明白,于老师也没讲到的知识,所以今天又将张老师的视频翻出来看看是怎么做的。。。

package cn.itcast.generic;

import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Date;
import java.util.Vector;

public class GenericDemo1 {

	public static void main(String[] args) throws Exception, NoSuchMethodException {
		
		Vector<Date> vector = new Vector<Date>();
		Method applyMethod = GenericDemo1.class.getMethod("apply", Vector.class);
		Type[] types = applyMethod.getGenericParameterTypes();
		ParameterizedType pType = (ParameterizedType) types[0];
		System.out.println(pType.getRawType());
		System.out.println(pType.getActualTypeArguments()[0]);
	}
	
	public static void apply(Vector<Date> v) {
		
	}
}


 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值