如果存在使用泛型的集合对象的成员变量,那么类型擦除如何工作?
[{'count': 1, 'item_no': 'E-Y13-A3-301', 'price': 748},
{'count': 4, 'item_no': 'E-Y12-A6-301', 'price': 2992}]
与其他类型信息被删除的情况不同,在这种情况下,类型信息是否会被保留?
答案 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>
。这不是很有用。