gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:06:05 30 4
gpt4 key购买 nike

我试图从 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/

30 4 0