您的位置:首页 > 职场人生

黑马程序员-通过反射获取泛型参数类型

2012-08-02 17:59 309 查看
----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

package com.itcast.test2;
import java.util.*;
import java.lang.reflect.*;
public class GenericTest {
/**
* HashMap<String,Integer> hashMap = new HashMap<String,Integer>();
* 这个里面我们是无法通过变量hashMap而得到HashMap中参数的类型,
* 因为HashMap<String,Integer>在编译后字节码中去掉了类型
* 也就是说HashMap<String,Integer>和和HashMap<K,V>的字节码是一样的,
* 所以不能取得HashMap<String,Integer>中的参数类型,那我们可以通过把hashMap作为
* 一个参数传入一个方法中来获得HashMap<String,Integer>中的参数类型,
* 因为通过反射获得的Method中有能够获得参数化的类型的方法
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Method useParameterMethod = Class.forName("com.itcast.test2.GenericTest").getMethod("useParameter",HashMap.class);
Type[] gType = useParameterMethod.getGenericParameterTypes(); // 取得属性的泛型类型
ParameterizedType pType = (ParameterizedType)gType[0];
System.out.println(pType.getRawType()); // 获取原始类型
Type[] tArgs = pType.getActualTypeArguments(); // 获取参数类型
for(Type t : tArgs) {
System.out.println(t);
}
}
// 此方法作用就是在主方法中通过反射调用该方法获取参数类型
public static void useParameter(HashMap<String,Integer> hashMap) {}
}


----------- android培训java培训、java学习型技术博客、期待与您交流! ------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: