假设以下数据模型:
public Test extends CanDeserialize {
private List<String> userRoles;
...
}
当需要手动反序列化对象并且必须为userRole
实例化对象时,会发生以下问题:
List<String>
方法时,Java反射会将List
识别为.GetType()
.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
??
答案 0 :(得分:1)
在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
类型。是的,这意味着你不需要反思来初始化它。