-1

我试图弄清楚 List 在我的程序中实现什么类型的类。

我正在抓取 JSON 数据并将其放在根对象中。然后,此根对象中包含用于存储 JSON 数据的每个元素的列表。

例如,我有一个具有声明字段的根

List<Person> people
List<Location> locations

所以我想要做的是遍历根类的每个字段,获取我当前正在查看的列表的类的类型,然后为该类调用特定的函数。(当我说特定函数时,我的意思是我声明了一个接口,这样我就可以返回实现该接口的类类型并运行它实现的函数以将列表分开。

调用Class<?> clss = fieldObj.getType()(其中 fieldObj 是字段类型)只返回它是一个列表。如何获取此字段的列表类型?

4

2 回答 2

1

如果您在运行时查找列表中包含的对象的类型,则无法从其List本身中执行此操作。这是因为类型擦除,这意味着在运行时所有Lists 都是List<Object>. 如果您需要确定列表中对象的类型,请获取列表中的第一个元素并执行instanceofassignableFrom

于 2012-08-22T17:02:03.537 回答
1

在 Java 1.5+ 中,它可以部分地使用类中的getGenericType()方法来完成Field

Field.getGenericType() 将查询类文件中的签名属性(如果存在)。如果该属性不可用,它会退回到 Field.getType() ,这不会因引入泛型而改变。

请参阅此处的示例。查看代码打印的内容

$ java FieldSpy FieldSpy list

> GenericType: java.util.List<java.lang.Integer>

于 2012-08-22T17:35:02.193 回答