[英]Generic type instantiation using reflection
假設以下數據模型:
public Test extends CanDeserialize {
private List<String> userRoles;
...
}
當需要手動反序列化對象並必須為userRole
實例化對象時,會發生以下問題:
.GetType()
方法時將List<String>
識別為List
.GetGenericType()
方法時,不能實例化T
的實際類型,因為該方法沒有為此提供任何功能。 <>
內部提取類型並通過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.