在Java中键入Erasure

时间:2011-01-17 13:03:45

标签: java generics type-erasure

类型擦除应该删除所有通用信息...... 如果是这种情况,像GSON这样的库如何使用泛型来确定要反序列化的类型?

e.g。

private Map<String,Date> tenordates;

这将反序列化为<String,Date> 在哪里

private Map<Date,Date> tenordates;

将反序列化为<Date,Date>

所以不知何故它在运行时使用通用信息。

1 个答案:

答案 0 :(得分:5)

类型擦除不会删除所有类型信息。它不会从类,字段,返回类型和参数定义中删除它。保留以下示例中的类型信息:

public class Foo extends List<Bar> { ..}

private List<Foo> foos;

public List<Foo> getFoos() {..}

public void doSomething(List<Foo> foos) {..}

这可以通过反射访问 - java.lang.reflect.ParameterizedType。您可以检查给定的Type是否为instanceof该类,并将其投射到该类并获取类型信息。