[英]Class object of generic class (java)
java中有沒有辦法獲取類似Class<List<Object>>
的實例?
怎么樣
(Class<List<Object>>)(Class<?>)List.class
public final class ClassUtil {
@SuppressWarnings("unchecked")
public static <T> Class<T> castClass(Class<?> aClass) {
return (Class<T>)aClass;
}
}
現在你打電話:
Class<List<Object>> clazz = ClassUtil.<List<Object>>castClass(List.class);
由於類型擦除,在 Class 級別,所有 List 接口都是相同的。 它們僅在編譯時不同。 因此,您可以將Class<List>
作為類型,其中List.class
屬於該類型,但您無法獲得更具體的信息,因為它們不是單獨的類,只是被編譯器刪除的類型聲明為顯式鑄件。
正如其他答案中提到的, Class
代表一種擦除類型。 要表示類似ArrayList<Object>
,您需要一個Type
。 一個簡單的方法是:
new ArrayList<Object>() {}.getClass().getGenericSuperclass()
1.5 中引入的泛型類型 API 相對容易找到。
你可以使用傑克遜的ObjectMapper
ObjectMapper objectMapper = new ObjectMapper();
CollectionType listType = objectMapper.getTypeFactory().constructCollectionType(List.class, ElementClass.class)
沒有未經檢查的警告,沒有空的 List 實例。
您可以使用以下方法獲取 List 類型的類對象:
Class.forName("java.util.List")
或者
List.class
但是因為 Java 泛型是使用擦除實現的,所以您無法為每個特定類獲得一個專門的對象。
List.class
特定類型的泛型在編譯時被“擦除”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.