找出Field是什么类型的列表

时间:2012-08-22 16:50:23

标签: java class dynamic field

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

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

例如,我有一个声明字段为

的根
List<Person> people
List<Location> locations

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

  

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

查看示例here。查看代码打印的内容

$ java FieldSpy FieldSpy list

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