以下是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类型?
答案 0 :(得分:3)
您应该在开始时明确声明:
ArrayList<String> songList = new ArrayList<String>();
如果你这样声明:
ArrayList songList = new ArrayList<String>();
然后你说songList
是ArrayList
Object
的{{1}},无论=
的权利是什么。作业不会改变这一点,所以:
ArrayList songList = new ArrayList<String>();
songList = StoreSongLink.linkList;
不会更改songList
的类型,它仍然有效ArrayList<Object>
。
如果您修复了声明,那么for
循环应如下所示:
for (String list : songList){}
因为songList
是String
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){}