如何获取java泛型的参数类型

来源:百度知道 编辑:UC知道 时间:2024/06/08 06:14:51
private List<String> list = new ArrayList<String>(0);
如何获取list的参数类型是String?

注意不是获取参数的值
1.list.getClass();//这是获取list本身的类型,错误
2.for(int i = 0;i<list.size();i++){//list的长度为0,错误
Object o = list.get(i);
return o.getClass();
}
3。ParameterizedType type = ((ParameterizedType)t2.list.getClass().getGenericSuperclass())[0];
return type.getActualTypeArguments();这是获取父类的参数类型,错误

一般可以使用反射来获取泛型参数的实际类型,以下是详细代码:
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;

public class GenericTest {
/*使用反射来获取泛型信息*/
private Map<String, Integer> score;
public static void main(String[] args) throws SecurityException, NoSuchFieldException {
//Class clazz = GenericTest.class;
Class<GenericTest> clazz = GenericTest.class;
//System.out.println(clazz);
Field f = clazz.getDeclaredField("score");

//直接使用getType只对普通类型有效,无法取到泛型参数
Class<?> a = f.getType();
System.out.println("score的类型是:"+a);

//获得Field实例f的泛型类型
Type gType = f.getGenericType();
//如果gType类型是ParameterizedType的对象
if (gType instanceof Parameteriz