簡體   English   中英

使用反射的泛型類型實例化

[英]Generic type instantiation using reflection

假設以下數據模型:

public Test extends CanDeserialize {
   private List<String> userRoles; 
   ...
} 

當需要手動反序列化對象並必須為userRole實例化對象時,會發生以下問題:

  1. Java反射在調用.GetType()方法時將List<String>識別為List
  2. 調用.GetGenericType()方法時,不能實例化T的實際類型,因為該方法沒有為此提供任何功能。
  3. <>內部提取類型並通過Class.fromClass(...)實例化可能會引起問題,因為泛型類型可能非常復雜,例如Pair<Pair<String,int>, Pair<String,int>>

假設反序列化發生在類內部,如下所示:

public abstract CanDeserialize{
    public void deserialize(String object){
        Field[] fields = this.getClass().getDeclaredFields();
    } 

我該如何為userRoles實例化一個對象?

在Java中,您可以執行以下操作:

List list = new ArrayList();
list.add("Some Values");

現在假設您有一個List<String>您可以通過獲取字段(如您所做的那樣)使用反射來設置值,然后

fields[0].set(this, list); // in your example there's 1 field only, so the index is 0.

之所以可行,是因為在Java中,任何泛型最終都會導致Object類型。 是的,這意味着您不需要反射就可以初始化它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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