我有一个班级订单,如下所示:
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。
答案 0 :(得分:1)
如果您多次向Order
添加相同的Map
个实例,则Map
中的所有值都将相同。
创建新的clear()
:
Order
替换
order.clear();
与
order = new Order ();
如果您没有将该对象添加到Map
,那么使用您重用单个对象的范例是有意义的。
例如,您可以使用单个StringBuilder
实例生成将添加到String
的{{1}}:
Map
答案 1 :(得分:0)
您为订单创建了一个对象。
您将此对象放入列表
您编辑同一个对象
您(重新)将同一个对象放在列表中
- &GT;您的列表包含相同对象的2倍
事实上:
使用新的订单详细信息更新对象
应该是
使用其他订单明细
更新对象
答案 2 :(得分:-1)