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

时间:2014-05-11 17:47:21

标签: 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");

JSP:

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

2 个答案:

答案 0 :(得分:6)

您尚未显示displaySearchResults方法,但听起来似乎返回Vector而不是ArrayList。但从根本上说,你不应该关心它返回的实现 - 如果你只是转向List<Car>,你应该没问题:

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

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

在集合界面方面比具体类更干净 - 你已经在第一段代码中做到了这一点。 那个只要求返回值实现List<Car>,所以在以后处理相同的值时,你应该只有相同的要求。

同样值得理解的是,您对List<Car>的演员有点不安全,因为它只有真的投射到List,因为缺乏具体的仿制药。当您访问单个元素时,如果结果是某些非ClassCastException引用,您仍然可以获得Car。不幸的是,你不能做很多事情。

答案 1 :(得分:2)

displaySearchResults()方法返回一个Vector,它是一种List,但与ArrayList不同。

在JSP中,您应该将resultList声明为List而不是ArrayList - 然后DAO使用哪个List实现并不重要。对于变量声明,使用最通用的类​​型(即List而不是Vector或ArrayList),返回类型和参数通常是一种很好的做法。