我知道从https://stackoverflow.com/a/20445493/2848676下面的代码给出了错误type mismatch cannot convert from element type object to string
:org.json.simple.JSONArray设计不好?
ArrayList objectArray = new ArrayList();
for (String str : objectArray) {
编译器给我在我的objectArray的声明说:ArrayList is a raw type. References to generic type ArrayList<E> should be parameterized
警告。这一切对我来说都很合理。修复方法是指定通用类型:
ArrayList<String> stringArray = new ArrayList<String>();
for (String str : stringArray) {
这样可以避免编译器警告和编译错误。
我的问题是,虽然我试图遍历ArrayList的一个子类称为org.json.simple.JSONArray
,我没有控制如何实例化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来解决泛型问题。向后兼容性是一个潜在的原因;我不知道这是否是原因。 – DwB 2014-11-14 18:40:38