【发布时间】:2021-08-08 11:15:27
【问题描述】:
在 Java 中,我们不能在方法中重新分配引用。
所以以下不起作用:
class SomeClass {
List<PaidOrders> paidOrders;
List<PendingOrders> pendingOrders;
List<CancelledOrders> cancelledOrders;
private void process(List<OrderStatus> data, List<Orders> currentOrderlist) {
List<Order> newOrders = fromOrderStatus(data);
currentOrderlist = newOrders;
}
}
但以下方法确实有效:
class SomeClass {
private void process(List<OrderStatus> data, List<Orders> currentOrderlist) {
List<Order> newOrders = fromOrderStatus(data);
currentOrderlist.clear();
currentOrderlist.addAll(newOrders); // <- extra linear loop
}
}
问题在于第二个示例执行了一个额外的线性循环以从一个列表复制到另一个列表。
问题:
我想知道,是否有一些设计方法可以让我巧妙地替换参考? IE。以某种方式使第一个 sn-p 与参数或其他东西的一些变化一起工作?
更新
在 cmets 之后,我想澄清一下 currentOrderList 可以是 paidOrders、pendingOrders、cancelledOrders 中的任何一个。process 的代码对所有类型都是相同的。
【问题讨论】:
-
是否需要通过
currentOrderlist。您从方法返回newOrders,并在调用方法时直接将其分配给currentOrderlist -
有
currentOrderlist字段吗? -
@ScaryWombat:它已经是一个字段,但是我有多个这样的列表(但存储了不同的类型)作为成员,并且它们正在执行相同的处理,所以我需要将列表传递为避免代码重复的参数。我只是简化了帖子,也许我应该补充一下?
-
@VaibS:请同时查看上面的评论(更新后的帖子)
-
@ScaryWombat:更新帖子
标签: java list oop arraylist design-patterns