java.util.Vector 无法转换为 java.util.ArrayList

标签 java jsp servlets arraylist

我试图从 servlet 返回数据库搜索结果的 ArrayList 以显示在 jsp 页面上。

在servlet中设置arraylist作为请求的属性,并将请求转发到jsp页面。当我尝试在 jsp 页面上检索它时,它给出以下错误:

“java.util.Vector 无法转换为 java.util.ArrayList”

servlet 代码:

List<Car> ResultList=SearchPartsDAO.displaySearchResults(car);
        if(ResultList.size()>=1){
            request.setAttribute("ResultList", ResultList);
            request.getRequestDispatcher("SearchResults.jsp").forward(request, response);
        }else
            response.sendRedirect("NotFound.jsp");

JSP:

<body>
<% 
ArrayList<Car> resultList = new ArrayList<Car>();
resultList=(ArrayList<Car>)request.getAttribute("ResultList");
%>
<%System.out.println(resultList.get(0).getCarMake());%>

最佳答案

您还没有显示您的displaySearchResults方法,但听起来返回一个 Vector而不是ArrayList 。但从根本上讲,您不应该关心它返回哪个实现 - 如果您只是转换为 List<Car>相反,你应该没问题:

<body>
<% 
List<Car> resultList = (List<Car>) request.getAttribute("ResultList");
%>
<%System.out.println(resultList.get(0).getCarMake());%>

请注意我如何删除空 ArrayList 的初始分配- 如果您立即要为变量分配一个新值,那么这是毫无意义的。

使用集合接口(interface)比使用具体类更清晰 - 并且您已经在第一个代码片段中做到了这一点。 只需要返回值实现 List<Car> ,所以当你稍后处理相同的值时,应该只有相同的要求。

还值得理解的是,您的转换为 List<Car>有点不安全,因为它只是真正转换为 List ,由于缺乏具体化的泛型。您仍然可以获得 ClassCastException稍后当您访问各个元素时,如果它们结果是一些非 Car引用。不幸的是,您对此无能为力。

关于java.util.Vector 无法转换为 java.util.ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23595928/

相关文章:

字符串的 Java 7zip 压缩

java - 每次点击提交按钮时如何加一或递增整数?

java - Web 应用程序的两个客户端之间的通信

javascript - 解析来自 Servlet 的 JSON 响应

java - Spring MVC 在 WEB-INF/views/package 中找不到合适的 jsp

java - 将数据从 Servlet 返回到 Java 客户端

java - 对字符串列表进行排序

java - resteasy 客户端的自定义 Jackson 序列化程序

java - 需要在 java api 中的 Solr 搜索中搜索文本及其周围的几行

java - 使用 <a> 标签在 jsp 页面中链接 php 页面