gpt4 book ai didi

java - Java类对象的重用

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:14 25 4
gpt4 key购买 nike

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

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();
}

在这里,我创建一个订单对象并添加详细信息,并将其添加到列表中。现在清除对象中的数据并使用新订单详细信息更新对象,但第一个订单详细信息也会使用第二个订单详细信息更新。我认为订单对象是按引用传递。如何实现对象重用,避免按引用传递并拥有所有订单详细信息?

问候,纳加斯里。

最佳答案

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

不要调用 clear(),而是创建一个新的 Order:

替换

order.clear();

order = new Order ();

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

例如,您可以使用单个 StringBuilder 实例来生成将添加到 MapString :

Map<Integer,String> map = new HashMap<>();
StringBuilder sb = new StringBuilder(128);
sb.append("one");
map.put(1,sb.toString());

sb.setLength(0); // equivalent to your clear()
sb.append("two"); // reuse same StringBuilder instance
map.put(2,sb.toString());

关于java - Java类对象的重用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39765055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com