阅读量:0
在Java中,无法直接获取List泛型类型,因为泛型在编译时会进行类型擦除,运行时无法获取到具体的泛型类型信息。
但是,可以通过一些间接的方法获取到List泛型类型的信息。一种常见的方法是通过反射来获取。
下面是一个示例代码,演示了如何通过反射获取List泛型类型:
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> list = new ArrayList<>(); Type genericType = list.getClass().getGenericSuperclass(); if (genericType instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericType).getActualTypeArguments(); if (actualTypeArguments.length > 0) { Class<?> genericClass = (Class<?>) actualTypeArguments[0]; System.out.println("List泛型类型为: " + genericClass.getName()); } } } }
在上面的代码中,首先获取List的Class对象,然后获取其父类的泛型类型信息。如果该泛型类型是ParameterizedType类型,即带有实际类型参数的泛型类型,就可以通过调用getActualTypeArguments()
方法获取到实际类型参数的数组。数组中的第一个元素即为List的泛型类型。
需要注意的是,上面的代码假设List是直接继承自ArrayList,如果List是直接实现了接口或者继承了其他类,可能需要调整代码中的getGenericSuperclass()
方法。另外,如果List没有指定泛型类型,那么getActualTypeArguments()
方法返回的数组长度为0。