小编典典

必需的java.util.ArrayList,找到java.lang.Object:我不明白此错误的原因

java

以下是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类型的?


阅读 738

收藏
2020-11-30

共1个答案

小编典典

您应该在一开始就明确声明它:

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

如果您这样声明:

ArrayList songList = new ArrayList<String>();

然后你说songListArrayListObjectS,不管是什么来的右侧=。分配不会更改,因此:

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

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

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

for (String list : songList){}

因为songList是的数组列表String。有了它,Java
Object将从中提取每个元素,songList并尝试将其分配给您在左侧声明的内容:,您将其称为ArrayList<String>。它不能将转换ObjectArrayList<String>(特别是因为Object确实只是在String下面),因此会引发错误。

2020-11-30