You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非static场景下Getter获取ArrayList无返回值的问题排查与解决

购物车数据无法打印的问题及解决

问题背景

有两个类:ShoppingCart类包含一个private修饰的ArrayList用于存储购物车商品,CartGUI类负责打印购物车中的商品。通过Getter方法在CartGUI中获取商品列表并打印时,没有输出任何内容。测试确认原本的ArrayList并非空集合,将其设为static后代码可以正常运行,但不符合需求。

现有代码示例

CartGUI.java

public void printCart() {
        ShoppingCart shoppingCart = new ShoppingCart();
        System.out.println("Products in cart: ");
        for (Product p : shoppingCart.getCart()) {
            System.out.println(p.getProductName());
        }
    }

ShoppingCart.java

private ArrayList<Product> cart = new ArrayList<>();

public ArrayList<Product> getCart() { return cart; }

问题原因

在printCart方法中新建了一个ShoppingCart实例,这个新实例的cart集合是空的,和原本存储了商品的ShoppingCart实例不是同一个对象,因此遍历不到任何数据。

解决方法

最终通过单例模式确保全局只有一个ShoppingCart实例,并将这个唯一实例传入CartGUI类中使用,解决了问题。

示例修改如下:

  1. 将ShoppingCart改为单例实现:
public class ShoppingCart {
    private static ShoppingCart instance;
    private ArrayList<Product> cart = new ArrayList<>();

    private ShoppingCart() {}

    public static ShoppingCart getInstance() {
        if (instance == null) {
            instance = new ShoppingCart();
        }
        return instance;
    }

    public ArrayList<Product> getCart() { return cart; }
}
  1. 在CartGUI中使用该单例实例,而非新建对象:
public void printCart() {
        ShoppingCart shoppingCart = ShoppingCart.getInstance();
        System.out.println("Products in cart: ");
        for (Product p : shoppingCart.getCart()) {
            System.out.println(p.getProductName());
        }
    }

也可以通过构造方法将单例实例传入CartGUI,核心是确保CartGUI使用的是存储了商品的那个ShoppingCart实例。


内容的提问来源于stack exchange,提问作者Jr.Macking

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:45:18