怎么获取list的泛型类型
时间: 2023-09-17 16:11:59 浏览: 208
在Java中,可以通过反射机制获取List的泛型类型。具体来说,可以通过调用List的getClass()方法获取List的Class对象,然后通过Class对象的getGenericSuperclass()方法或者getGenericInterfaces()方法获取List的泛型类型信息,再通过ParameterizedType的getActualTypeArguments()方法获取List的实际类型参数。以下是一个示例代码:
```
List<String> list = new ArrayList<>();
Type genericType = list.getClass().getGenericSuperclass();
if (genericType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) genericType;
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
if (actualTypeArguments.length > 0) {
Class<?> clazz = (Class<?>) actualTypeArguments[0];
System.out.println(clazz.getName()); // 输出 "java.lang.String"
}
}
```
在上面的示例代码中,首先创建了一个List<String>对象。然后通过调用getClass()方法获取List的Class对象,再通过getGenericSuperclass()方法获取List的泛型类型信息。由于List继承自Collection接口,因此获取到的泛型类型信息是一个ParameterizedType对象。接着通过ParameterizedType的getActualTypeArguments()方法获取List的实际类型参数,即String类型。最后输出String类型的类名。
另外,如果List是通过匿名内部类定义的,也可以通过getGenericInterfaces()方法获取到List的泛型类型信息。具体来说,可以通过以下代码获取到List的泛型类型信息:
```
List<String> list = new ArrayList<String>(){};
Type genericType = list.getClass().getGenericInterfaces()[0];
if (genericType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) genericType;
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
if (actualTypeArguments.length > 0) {
Class<?> clazz = (Class<?>) actualTypeArguments[0];
System.out.println(clazz.getName()); // 输出 "java.lang.String"
}
}
```
在上面的代码中,定义了一个匿名内部类来创建List对象,并通过getGenericInterfaces()方法获取到List的泛型类型信息。
阅读全文