需要java.util.ArrayList <string>,发现java.lang.Object:我不明白这个错误的原因</string>

时间:2012-08-16 13:04:36

标签: java foreach arraylist

以下是jsp页面的一些片段:

<%! ArrayList songList = new ArrayList<String>(); %>

    <%
        songList = StoreSongLink.linkList;
        // linkList is a static variable in the class StoreSongLink
        // There the linkList is defined as public static ArrayList<String> linkList = new ArrayList<String>();
    %>

<%}  else {
       for (ArrayList<String> list : songList){}

%>

else srciplet中的代码产生错误required java.util.ArrayList<String> found java.lang.Object。为什么是这样 ?我不明白这个的原因。

为什么编译器将songList称为Object类型?

7 个答案:

答案 0 :(得分:3)

您应该在开始时明确声明:

ArrayList<String> songList = new ArrayList<String>();

如果你这样声明:

ArrayList songList = new ArrayList<String>();

然后你说songListArrayList Object的{​​{1}},无论=的权利是什么。作业不会改变这一点,所以:

ArrayList songList = new ArrayList<String>();
songList = StoreSongLink.linkList;

不会更改songList的类型,它仍然有效ArrayList<Object>

如果您修复了声明,那么for循环应如下所示:

for (String list : songList){}

因为songListString s的数组列表。正如您所拥有的那样,Java从Object中提取每个songList并尝试将其分配给您在:左侧声明的内容,您已将其称为ArrayList<String> }。它无法将Object转换为ArrayList<String>(特别是因为Object实际上只是下面的String),所以它会抛出错误。

答案 1 :(得分:2)

for (ArrayList<String> list : songList){} // Error is here

你已经定义了Object类型的ArrayList的引用,并声明了一个String类型的ArrayList实例,它应该是ArrayList<String> songList = new ArrayList<String>();ArrayList<String> songList = new ArrayList();(仅支持java 7)

因此,更正后的代码可能就像 -

<%! List<String> songList = new ArrayList<String>(); %>
...
for (String list : songList){
}

答案 2 :(得分:0)

使用:

for (String s: songList) {
  // etc.
}

同时确保StoreSongLink.linkList的类型为ArrayList<String>

答案 3 :(得分:0)

for (ArrayList<String> list : songList){}

必须是

for (Object list : songList){}

因为songList声明的类型是ArrayList(等于ArrayList)

答案 4 :(得分:0)

当您为songList指定一个新的ArrayList时,您将songList定义为arrayList(即arrayList)。这样可以将songList作为对象进行迭代。但是你实际上正在将songList作为ArrayList迭代。

因此,简而言之,您需要将songList切换为ArrayList,并且您需要使用Strings迭代songList,而不是使用ArrayList。

答案 5 :(得分:0)

正如您可能知道的那样,

ArrayList是一种原始类型,当不使用参数化ArrayList<E>声明时。因此,您有效地将其转换为Object而不是String的数组列表,并进行初始化:
 ArrayList songList = new ArrayList<String>();

答案 6 :(得分:0)

您的迭代错误

for (ArrayList<String> list : songList){}

songList包含String元素列表,而不是ArrayList<String>

列表

所以你需要以这种方式迭代for (Object song: songList){}

ArrayList<String> songList = new ArrayList<String>();
for (String song: songList){}