簡體   English   中英

泛型類的類對象(java)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM