如果我从泛型类派生非泛型类,会发生什么?

时间:2015-06-01 06:19:05

标签: java generics serialization

让我们说,我有一个名为Person的常用POJO。现在,由于类型擦除,ArrayList<Person>的实例在运行时将具有类型ArrayList。如果此实例通过某些库(如Gson)进行序列化/反序列化,则所需的对象不是ArrayList<Person>,除非我们特别提供类型令牌。
现在,问题就在这里。如果我按如下方式创建另一个类(比如Persons)会发生什么:

public class Persons extends ArrayList<Person> {
}

这里会保留类型信息吗?反序列化机制是否能够推断出类型确实是ArrayList<Person>而不是原始类型ArrayList

1 个答案:

答案 0 :(得分:0)

  

这里会保留类型信息吗?

是;例如,这个:

final ParameterizedType superTypeOfPersons =
    (ParameterizedType) Persons.class.getGenericSuperclass();
System.out.println(superTypeOfPersons.getActualTypeArguments()[0].getSimpleName());

将打印Person

  

反序列化机制是否能够推断出类型确实是ArrayList<Person>而不是原始类型ArrayList

可能可以这样做,但这并不一定意味着 这样做;这不是一件微不足道的事情。如果您需要支持一组特定的序列化框架,那么您应该对每个框架进行测试。