【发布时间】:2014-11-14 18:20:31
【问题描述】:
我从https://stackoverflow.com/a/20445493/2848676 知道,以下代码给出了错误type mismatch cannot convert from element type object to string:
ArrayList objectArray = new ArrayList();
for (String str : objectArray) {
编译器在我声明 ArrayList is a raw type. References to generic type ArrayList<E> should be parameterized 的 objectArray 声明中给了我一个警告。这一切对我来说都很有意义。解决方法是指定泛型类型:
ArrayList<String> stringArray = new ArrayList<String>();
for (String str : stringArray) {
这样可以避免编译器警告和编译错误。
我的问题是我试图迭代一个名为 org.json.simple.JSONArray 的 ArrayList 子类,但我无法控制 JSONArray 的实例化方式。因此,我在任何地方都看不到编译器警告,但在 for 循环代码行中确实收到了编译错误:
JSONArray insights = (JSONArray)jsonResult.get("insights");
for (JSONObject insightGroup : insights) {
我知道我可以像这样解决这个问题:
JSONArray insights = (JSONArray)jsonResult.get("insights");
for (int i=0; i<insights.size(); i++) {
JSONObject insightGroup = (JSONObject) insights.get(i);
但是有人可以解释泛型类型的细节吗?特别是,如何在不指定泛型类型的情况下实例化org.json.simple.JSONArray? org.json.simple.JSONArray 只是设计不佳?还是我没有正确使用org.json.simple.JSONArray?
【问题讨论】:
-
想象一下,您想将 JSON 与在 java 1.4 下运行的遗留应用程序一起使用。现在,尝试使用 java 1.4 解析泛型。向后兼容是一个潜在的原因;不知道是不是这个原因。