2012-08-22 27 views
-1

我想弄清楚什麼類型的List是在我的程序中實現的。找出一個字段是什麼類型的列表

我抓住JSON數據並將其放置在根對象中。該根對象然後在其中具有列表來存儲JSON數據的每個元素。

比如我有一個有

List<Person> people 
List<Location> locations 

所以我希望能夠做的是遍歷根類的每個字段聲明的字段根,搶類的類型的列表我目前正在查看的是,然後調用該類的特定功能。 (當我說具體功能我的意思是我有一個接口聲明,以便我可以只返回實現該接口的類類型,並運行它實現的功能,以使列表分開。

調用Class<?> clss = fieldObj.getType()(其中fieldObj是type字段)只是返回它是一個列表我如何得到這個字段是什麼類型的列表?

+0

代碼打印什麼意思按類型做?實現'ArrayList' vs'LinkedList'或泛型類型'Person' vs'Location'? –

+0

看看[這個答案](http://stackoverflow.com/a/11264363/1065197)。 –

回答

1

如果您在運行時查找包含在列表中的對象的類型,那麼您不能從List這是因爲類型擦除,這意味着在運行時所有List s是List<Object>。如果您需要確定列表中的對象的類型,請獲取列表中的第一個元素並執行instanceofassignableFrom

+0

我最終在這裏使用了這個,從對象中抓取了列表,抓住了這個類然後創建了它的一個新實例!非常感謝!這樣比嘗試從實地獲得它更好,因爲這可以讓我獲得正確的課程! – DMCApps

1

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

Field.getGenericType()將在類文件中查詢簽名屬性(如果它存在)。如果該屬性不可用,它將回退到Field.getType(),該屬性在引入泛型時沒有改變。

查看示例here。看看什麼

$ java FieldSpy FieldSpy list

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

相關問題