java.util.ArrayList cannot be cast to ShoppingCart

有没有大神帮忙一下,我知道是ArrayList不能转为我这个类型,但我不知道怎么修改啊!!!!主要是在deleteItem方法中

ShoppingCart:

package com.ch.experience.chapter_4_1;

import java.util.*;

public class ShoppingCart {
    List<ShoppingItem> items=null;
    
    public ShoppingCart(List<ShoppingItem> items) {
        this.items = items;
    }

    public List<ShoppingItem> getItems(){
        return items;
    }

    public void remove(Integer productId){
        if (productId!=null){
            ShoppingItem sitm=items.get(productId);
            sitm.setQuantity(sitm.getQuantity()-1);
            if (sitm.getQuantity()<=0){
                items.remove(sitm);
            }
        }
    }
}
 

ShoppingCartServlet:

package com.ch.experience.chapter_4_1;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;


@WebServlet(name = "ShoppingCartServlet",urlPatterns = {"/products","/viewProductDetails","/addToCart","/viewCart","/deleteItem"})
public class ShoppingCartServlet extends HttpServlet {

    private ArrayList<Product> products=new ArrayList<Product>();
    @Override
    public void init() throws ServletException{
        products.add(new Product(1,"单反相机","尼康性价比最高的单反相机",4159.95F));
        products.add(new Product(2,"三星手机","三星公司的最新iPhone5产品",1199.95F));
        products.add(new Product(3,"笔记本电脑","联想公司的新一代产品",5129.95F));
        products.add(new Product(4,"平板电脑","苹果公司的新产品",1239.95F));

    }


    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String uri=request.getRequestURI();
        if (uri.endsWith("/products")){
            showProductList(response);
        }else if (uri.endsWith("/viewProductDetails")){
            showProductDetails(request,response);
        }else if (uri.endsWith("/viewCart")){
            showCart(request,response);
        }else if (uri.endsWith("/deleteItem")){
            deleteItem(request,response);
        }
    }



    private void showCart(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        out.println("<html><head><title>购物车</title></head>");
        out.println("<body><a href='products'>"+"商品列表</a>");
        HttpSession session=request.getSession();
        ArrayList<ShoppingItem> cart= (ArrayList<ShoppingItem>) session.getAttribute("cart");
        if (cart!=null){
            out.println("<table>");
            out.println("<tr><td style='width:50px'>数量"+"</td>"
            +"<td style='width:80px'>商品</td>"+"<td style='width:80px'>价格</td>"
            +"<td style='width:80px'>小计</td>"+"<td style='width:80px'>是否删除</td></tr>");
            double total=0.0;
            for (ShoppingItem shoppingItem:cart) {
                Product product=shoppingItem.getProduct();
                int quantity=shoppingItem.getQuantity();
                if (quantity!=0){
                    float price=product.getPrice();
                    out.println("<tr>");
                    out.println("<td>"+quantity+"</td>");
                    out.println("<td>"+product.getName()+"</td>");
                    out.println("<td>"+price+"</td>");
                    double subtotal=((int)(price*quantity*100+0.5))/100.0;
                    out.println("<td>"+subtotal+"</td>");
                    out.println("<td><a href=deleteItem?id="+product.getId()+">"+"删除</a>"+"</td>");
                    total+=subtotal;
                    out.println("</tr>");

                }
            }
            out.println("<tr><td colspan='4'"+"style='text-align:right'>"+"总计:"+total+"</td></tr>");
            out.println("</table>");
        }
        out.println("</table></body></html>");
    }

    private void showProductDetails(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out= response.getWriter();
        int productId=0;
        try {
            productId=Integer.parseInt(request.getParameter("id"));

        }catch (NumberFormatException e){

        }
        Product product =getProduct(productId);
        if (product!=null){
            out.println("<html><head>"+"<title>商品详细信息</title></head>"+"<body><p>商品详细信息</p>"
            +"<form method='post' action='addToCart'>");
            out.println("<input type='hidden' name='id'"+"value='"+productId+"'/>");
            out.println("<table>");
            out.println("<tr><td>商品名:</td><td>"+product.getName()+"</td></tr>");
            out.println("<tr><td>说明:</td><td>"+product.getDescription()+"</td></tr>");
            out.println("<tr><td>价格:</td><td>"+product.getPrice()+"</td></tr>");
            out.println("<tr>"+"<tr>"+"<td><input name='quantity'/></td>"+"<td><input type='submit' value='购买'/>"+"</td>"+"</tr>");
            out.println("<tr><td colspan='2'>"+"<a href='products'>商品列表</a>"+"</td></tr>");
            out.println("</table>");
            out.println("</form></body>");
        }else {
            out.println("No product found");
        }
    }

    private Product getProduct(int productId) {
        for (Product product:products) {
            if (product.getId()==productId){
                return product;
            }
        }
        return null;
    }


    private void showProductList(HttpServletResponse response) throws IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out= response.getWriter();
        out.println("<html><head><title>商品列表</title>"+"</head><body><p>商品列表</p>");
        out.println("<ul>");
        for (Product product:products){
            out.println("<li>"+product.getName()+"("+product.getPrice()+")("
                    +"<a href='viewProductDetails?id="+product.getId()+"'>详细信息</a>)");
        }
        out.println("</ul>");
        out.println("<a href='viewCart'>查看购物车</a>");
        out.println("</body></html>");
    }



    private void deleteItem(HttpServletRequest request, HttpServletResponse response) throws IOException {
        HttpSession session=request.getSession();
        ShoppingCart cart= (ShoppingCart) session.getAttribute("cart");
        try {
            int id=Integer.parseInt(request.getParameter("id"));
            ShoppingItem item=null;
            for (ShoppingItem shoppingItem1: cart.getItems()){
                if (shoppingItem1.getProduct().getId()==id){
                    item=shoppingItem1;
                    break;
                }
            }
            assert item != null;
            cart.remove(item.getProduct().getId());
        }catch (NumberFormatException e){
            System.out.println(e.getMessage());
        }
        session.setAttribute("cart",cart);
        response.sendRedirect("viewCart");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        int productId = 0;
        int quantity = 0;
        try {
            productId = Integer.parseInt(request.getParameter("id"));
            quantity = Integer.parseInt(request.getParameter("quantity"));

        } catch (NumberFormatException e) {
        }
        Product product = getProduct(productId);
        if (product != null && quantity >= 0) {
            ShoppingItem shoppingItem = new ShoppingItem(product, quantity);
            HttpSession session = request.getSession();
            ArrayList<ShoppingItem> cart = (ArrayList<ShoppingItem>) session.getAttribute("cart");
            if (cart == null) {
                cart = new ArrayList<ShoppingItem>();
                session.setAttribute("cart", cart);
            }
            cart.add(shoppingItem);

        }
        showProductList(response);
    }
}

 

133 行 ShoppingCart cart= (ShoppingCart) session.getAttribute("cart");  如果是这个强转错误的话,可以在上面打印出 session.getAttribute("cart")这个数据的json数据,如果是ArrayList,可以使用list接收,然后获取第一个数据,判断数据类型 if( xx.class instanceof ShoppingCart.class  ){ // 再强转}   。这样就安全些,不会抛异常

给个错误行数?