溫馨提示×

java怎么獲取list泛型類型

小億
212
2024-01-12 13:52:41
欄目: 編程語言

在Java中,無法直接獲取List泛型類型,因為泛型在編譯時會進(jìn)行類型擦除,運(yùn)行時無法獲取到具體的泛型類型信息。

但是,可以通過一些間接的方法獲取到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類型,即帶有實(shí)際類型參數(shù)的泛型類型,就可以通過調(diào)用getActualTypeArguments()方法獲取到實(shí)際類型參數(shù)的數(shù)組。數(shù)組中的第一個元素即為List的泛型類型。

需要注意的是,上面的代碼假設(shè)List是直接繼承自ArrayList,如果List是直接實(shí)現(xiàn)了接口或者繼承了其他類,可能需要調(diào)整代碼中的getGenericSuperclass()方法。另外,如果List沒有指定泛型類型,那么getActualTypeArguments()方法返回的數(shù)組長度為0。

1