背景
我正在尝试创建一个不可变对象,其中包含一组不可变对象,以及列表中的对象类型总计。
我创造了一个有点sudo的要点,试图表明我的意思。
Gist - Adjusting an immutable object that contains an immutable object list.
解释
我的例子展示了我目前是如何做到的,它确实有效。但并非适用于所有情况。
我的VeggieCartView将有一个回收者视图,其中包含一个新的/已保存的VeggieCart。
每个VeggieCart都有一份蔬菜清单。素食总数等...
然后我有一个帮助类VeggieChanger,它包含一个rx.Consumer<Veggie[]>
,它被设置并接受来自素食视图的任何1:1素食更改。
VeggieCartView设置消费者,因此当任何一个素食变化时,它会使用更改来创建更新的购物车。相应的车厂方法。适配器用于更改/检索其列表。
工作而非
这适用于一次更改一个,但批处理更改会导致并发异常。
我意识到我的要点不是可以运行的,并且没有显示大多数样板,而且我的部分或全部方法可能从根本上是错误的。话虽如此,我仍然希望有人可以就如何更好地实施我想要做的事情给我建议。
如果需要了解更多信息,请询问。感谢任何有帮助的人,
乔恩。
答案 0 :(得分:0)
我最终找出了我的主要问题。
将此添加到我的VeggieCartView:
public void bagAllCanned() {
final Veggie[] canned = new Veggie[cart.canTotal()];
final Veggie[] bagged = new Veggie[canned.length];
int t = 0;
final List<Veggie> veggies = cart.veggies();
for (int i = 0; i < veggies.size(); i++) {
final Veggie veggie = veggies.get(i);
if (veggie.canned()) {
canned[t] = veggie;
if (veggie instanceof Potato)
bagged[t] = Potato.can(veggie);
else if (veggie instanceof Tomato)
bagged[t] = Tomato.can(veggie);
t++;
}
}
for (int i = 0; i < canned.length; i++) {
veggieChange(canned[i], bagged[i]);
}
}
它修复了并发错误。
我仍然不确定我的方法是否正确。因此,即使问题大多得到回答,意见仍然非常受欢迎。