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

Ste*_*veK 0 java jsp servlets arraylist

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

将arraylist设置为servlet中的请求的地址,并将请求转发到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");
Run Code Online (Sandbox Code Playgroud)

JSP:

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

Jon*_*eet 6

你没有展示你的displaySearchResults方法,但听起来像是返回一个Vector而不是一个ArrayList.但从根本上说,你不应该关心它返回的实现 - 如果你只是强制转换List<Car>,你应该没问题:

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

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

在集合界面方面工作比具体类更清晰 - 而且你已经在第一段代码中做到了这一点.仅要求返回值的工具List<Car>,所以你应该只具有相同的要求时,你处理相同的值更高版本.

同样值得理解的是,你的演员List<Car>阵容有些不安全,因为它只是真正的演员List,因为缺乏具体的仿制品.ClassCastException当您访问各个元素时,如果它们变成某些非Car引用,您仍然可以获得更晚的元素.不幸的是,你不能做很多事情.