重用Java类对象

时间:2016-09-29 08:22:24

标签: java

我有一个班级订单,如下所示:

public class Order {

    private List<OrderLine> orderLines = new ArrayList<OrderLine>();


    public void add(OrderLine o) throws Exception {
        if (o == null) {
            System.err.println("ERROR - Order is NULL");

        }
        orderLines.add(o);
    }
    public void clear() {
      this.orderLines.clear();

    }
}

现在在我的主要内容我想使用一个订单变量并更新列表并打印输出

我的主要课程代码:

 public static void main(String[] args) throws Exception {

        Map<String, Order> allOrders = new HashMap<String, Order>();

        //Build Order 1
        Order order = new Order();
        order.add(new OrderLine(new Item("book", (float) 12.49), 1));
        order.add(new OrderLine(new Item("Pen", (float) 14.99), 1));

        allOrders.put("Order 1", order);
        order.clear();



        //Build Order 2

        // Reuse cart for an other order


        order.add(new OrderLine(new Item("imported box of chocolate", 10), 1));
        order.add(new OrderLine(new Item("perfume", (float) 47.50), 1));
        allOrders.put("Order 2", order);
        order.clear();
}

这里我创建了一个订单对象和addign详细信息并将其添加到list.Now清除对象中的数据并使用新订单详细信息更新对象,但第一个订单详细信息也使用二阶订单详细信息更新。认为订单对象是通过引用传递。如何实现对象重用,避免通过引用传递并具有所有订单详细信息?

此致 Nagasree。

3 个答案:

答案 0 :(得分:1)

如果您多次向Order添加相同的Map个实例,则Map中的所有值都将相同。

创建新的clear()

,而不是调用Order

替换

order.clear();

order = new Order ();

如果您没有将该对象添加到Map,那么使用您重用单个对象的范例是有意义的。

例如,您可以使用单个StringBuilder实例生成将添加到String的{​​{1}}:

Map

答案 1 :(得分:0)

  • 您为订单创建了一个对象。

  • 您将此对象放入列表

  • 您编辑同一个对象

  • 您(重新)将同一个对象放在列表中

- &GT;您的列表包含相同对象的2倍

事实上:

  

使用新的订单详细信息更新对象

应该是

  

使用其他订单明细

更新对象

答案 2 :(得分:-1)

您需要Singleton

之类的内容

或者只是这样做:

order = new Order ();