Java

java怎么获取list泛型类型

小亿
220
2024-01-12 13:52:41
栏目: 编程语言

在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。

1
看了该问题的人还看了