以下是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。为什么是这样 ?我不明白原因。
required java.util.ArrayList<String> found java.lang.Object
为什么编译器说songList是Object类型的?
您应该在一开始就明确声明它:
ArrayList<String> songList = new ArrayList<String>();
如果您这样声明:
ArrayList songList = new ArrayList<String>();
然后你说songList是ArrayList的ObjectS,不管是什么来的右侧=。分配不会更改,因此:
songList
ArrayList
Object
=
ArrayList songList = new ArrayList<String>(); songList = StoreSongLink.linkList;
不会改变类型songList,它仍然有效ArrayList<Object>。
ArrayList<Object>
如果修复了声明,则for循环应如下所示:
for
for (String list : songList){}
因为songList是的数组列表String。有了它,Java Object将从中提取每个元素,songList并尝试将其分配给您在左侧声明的内容:,您将其称为ArrayList<String>。它不能将转换Object为ArrayList<String>(特别是因为Object确实只是在String下面),因此会引发错误。
String
:
ArrayList<String>