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