<分区>
我从https://stackoverflow.com/a/20445493/2848676知道以下代码给出错误 type mismatch cannot convert from element type object to string
:
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
正确吗?