让我们说,我有一个名为Person
的常用POJO。现在,由于类型擦除,ArrayList<Person>
的实例在运行时将具有类型ArrayList
。如果此实例通过某些库(如Gson)进行序列化/反序列化,则所需的对象不是ArrayList<Person>
,除非我们特别提供类型令牌。
现在,问题就在这里。如果我按如下方式创建另一个类(比如Persons
)会发生什么:
public class Persons extends ArrayList<Person> {
}
这里会保留类型信息吗?反序列化机制是否能够推断出类型确实是ArrayList<Person>
而不是原始类型ArrayList
?
答案 0 :(得分:0)
这里会保留类型信息吗?
是;例如,这个:
final ParameterizedType superTypeOfPersons =
(ParameterizedType) Persons.class.getGenericSuperclass();
System.out.println(superTypeOfPersons.getActualTypeArguments()[0].getSimpleName());
将打印Person
。
反序列化机制是否能够推断出类型确实是
ArrayList<Person>
而不是原始类型ArrayList
?
可能可以这样做,但这并不一定意味着 这样做;这不是一件微不足道的事情。如果您需要支持一组特定的序列化框架,那么您应该对每个框架进行测试。