键入成员变量的擦除

时间:2017-06-28 20:52:19

标签: java generics

如果存在使用泛型的集合对象的成员变量,那么类型擦除如何工作?

[{'count': 1, 'item_no': 'E-Y13-A3-301', 'price': 748},
 {'count': 4, 'item_no': 'E-Y12-A6-301', 'price': 2992}]

与其他类型信息被删除的情况不同,在这种情况下,类型信息是否会被保留?

1 个答案:

答案 0 :(得分:0)

类型信息仍然被删除。 在运行时。编译器强制执行类型,因此您无法以编程方式滥用类型,但它们在运行时仍然不可用。

Andy Turner所述,您可以使用反射来获取field的声明类型。在您的示例中,在运行时,您的类型将为java.util.Map<java.lang.String, java.lang.String>。因此,如果您有固定类型,它将在运行时为您提供足够的信息。但是,如果您确实使用泛型,则无法提供足够的信息。例如:

class Pojo<T> {
    Map<String, T> map;
}

在这种情况下,您将使用反射获得的运行时类型为java.util.Map<java.lang.String, T>。这不是很有用。