0

以下是来自 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 ?

4

7 回答 7

3

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

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

如果你这样声明:

ArrayList songList = new ArrayList<String>();

然后你说songList的是s 的一个ArrayListObject不管 s 的右边是什么=。分配不会改变这一点,所以这个:

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

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

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

for (String list : songList){}

因为songListStrings 的数组列表。正如您所拥有的那样,JavaObject从中提取每个songList并尝试将其分配给您:ArrayList<String>. 它不能转换ObjectArrayList<String>(特别是因为Object它实际上只是String下面的),所以它会抛出一个错误。

于 2012-08-16T13:10:22.607 回答
2
for (ArrayList<String> list : songList){} // Error is here

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

所以更正后的代码可能像 -

<%! List<String> songList = new ArrayList<String>(); %>
...
for (String list : songList){
}
于 2012-08-16T13:12:12.387 回答
0

采用:

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

还要确保StoreSongLink.linkList是 type ArrayList<String>

于 2012-08-16T13:09:57.770 回答
0
for (ArrayList<String> list : songList){}

一定是

for (Object list : songList){}

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

于 2012-08-16T13:10:04.777 回答
0

当您为 songList 分配一个新的 ArrayList 时,您将 songList 定义为一个 arrayList(即 arrayList)。这样就可以将歌曲列表作为对象进行迭代。但是您实际上是在将 songList 作为 ArrayList 进行迭代。

所以简而言之,您需要将 songList 切换为 ArrayList,并且您需要使用字符串而不是 ArrayList 来迭代 songList。

于 2012-08-16T13:10:40.490 回答
0

ArrayList正如您可能知道的那样,当不使用参数化ArrayList<E>声明时,它是一种原始类型。因此,您通过初始化有效地将其转换为数组列表Object而不是:String
ArrayList songList = new ArrayList<String>();

于 2012-08-16T13:11:24.043 回答
0

你的迭代是错误的

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

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

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

或者

ArrayList<String> songList = new ArrayList<String>();
for (String song: songList){}
于 2012-08-16T13:14:39.510 回答