泛型学习-通过反射获得泛型的实际类型参数

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


public class FanXingTest {



/**注意:1在对泛型类型进行参数化时,类型参数的实例必须是引用类型,不能是基本类型。
* 2当一个变量声明为泛型时,只能被实例变量和方法调用,而不能被静态变量和静态方法调用,因为静态成员是所有参数化的类所共享,所有静态成员不应该有类级别的类型参数。

*/
public static void main(String[] args) throws  Exception {
//第一个例子
int a=add(3,4);    //两个参数类型一样,返回值的类型就是参数的类型
Number b= add(3.2,5);//当两个参数类型不一样时,返回类型是这两个参数的共同类型(最大公约数)。
Object obj= add(10,"sdf");//当两个参数类型不一样时,返回类型是这两个参数的共同类型(最大公约数)。

//第二个例子
swap(new String[]{"1","2","3","4","5"},1,2);
//swap(new int[]{1,2,3,4,5},1,2);//这句话会报错,因为泛型参数只接受引用类型的参数,因int[]数组是基本类型(数组本身就是对象,不能自动装箱和拆箱),上面代码中使用的类型是基本数据类型,java会自动装箱和拆箱。
obj=1;
int s=con(obj);
System.out.println(s);

//第三个例子
//通过反射获取泛型的实际类型参数
Method metapp=FanXingTest.class.getMethod("applyVector",Vector.class);
Type[] type=metapp.getGenericParameterTypes();//得到参数类型的数组
ParameterizedType par=(ParameterizedType) type[0];//ParameterizedType表示参数化类型,如 Collection<String>。 
System.out.println(par.getRawType());//返回 Type 对象,表示声明此类型的类或接口。
System.out.println(par.getActualTypeArguments()[0]);//返回表示此类型实际类型参数的 Type 对象的数组。

}


//第一个例子
public static <T> T  add(T a,T b){
return a;
}
//第二个例子
public static <T> void swap(T[] a,int i,int j){
T temp=a[i];
a[i]=a[j];
a[j]=temp;
}
public static <T> T con(Object obj){
return (T)obj;
}
//第三个例子
public static void applyVector(Vector<String> vec){

}
}---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值