java 对我的ArrayList使用getter似乎不会返回值

mwngjboj  于 12个月前  发布在  Java
关注(0)|答案(3)|浏览(154)

我有两个类,其中一个类包含一个ArrayList,其中有添加到购物车中的商品,另一个类打印购物车中的商品。由于ArrayList是私有的,我使用了一个getter从ArrayList中获取产品并在GUI类中打印它们,但它什么也没有返回。
到目前为止,我的实现是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; }


我测试了ArrayList是否为空,但它不是。如果ArrayList设置为静态,我的代码似乎可以工作,但这不是必需的。
我认为使用Singleton可以解决这个问题,但这并不起作用。
编辑:我能够通过使用Singleton并将ShoppingCart的同一示例传递给CartGUI来解决这个问题。

yws3nbqq

yws3nbqq1#

在你的PrintCart()方法中,你的ShoppingCart对象是用一个购物车示例化的,这个购物车有一个空的ArrayList产品。在你开始循环之前,你需要用一个setter填充这个购物车。

aemubtdh

aemubtdh2#

像这样尝试。无论ShoppingCart是否是静态的,这都可以工作。只需将ShoppingCart示例传递给方法。

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

字符串
但是在ShoppingCart类中使用getCart()方法没有多大意义。getItems()getProducts()可能更有意义。
或者将printCart方法包含在ShoppingCart类中,如下所示:

class ShoppingCart {
     private List<Product> products = new ArrayList<>();
     public void add(Product) {
           products.add(Product);
     }
     public List<Product> getProducts () {
           return new ArrayList<>(products); //defensive copy
     }
     public void printCart() {
           System.out.println("Products in cart: ");
           for (Product p : products) {
                 System.out.println(p.getProductName());
           }
     }
}

6tdlim6h

6tdlim6h3#

我认为你每次都在printCart()中创建一个新的购物车。最好使用现有的购物车或将其传递给GUI类。在CartGUI.java中,将现有的ShoppingCart示例传递给printCart方法。

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

// I'm an aspiring Java developer keen on enhancing my coding skills and ensuring robust code practices.
// Feel free to provide suggestions or improvements. Thank you!

字符串
然后在CartGUI中调用printCart方法时传递现有ShoppingCart的对象。

ShoppingCart shoppingCart = new ShoppingCart();
 // Add items to the cart
 CartGUI cartGUI = new CartGUI();
 cartGUI.printCart(shoppingCart);   // Now it will allow you to use the same cart instance every time

相关问题