2017-04-19 80 views
-1

背景的Re /创建包含一个不可变对象列表

我试图创建列表中包含不可变对象的列表不可变对象,以及对象类型总数不可变对象。

我创建了一个轻微的sudo要点,试图展现我的意思。

Gist - Adjusting an immutable object that contains an immutable object list.

说明

我的例子显示了如何我目前做的,它的工作。但不是所有情况。

我的VeggieCartView将有一个recyclerview,充满新/保存VeggieCart

每个VeggieCart都有一个蔬菜列表。素食总数等...

然后,我有一个帮助类VeggieChanger,它包含一个rx.Consumer<Veggie[]>设置并接受素食视图的任何1:1素食更改。

VeggieCartView设置消费者,因此当任何素食品发生变化时,它会使用更改的相应购物车工厂方法创建更新的购物车。该适配器用于更改/检索其列表。

工作,而不是

这非常适用于改变一次一个,但是配料的变化是抛出并发异常。

我意识到我的要点不是可运行的,并且不会显示大多数样板,并且我可能在某些或所有方法上都会出现根本性错误。据说,我仍然希望有人能就如何更好地实施我想要做的事情给我建议。

如果需要了解更多信息,请询问。谢谢任何有帮助的人,

乔恩。

+1

'调整不可变对象'是一个矛盾的术语。其余的是坦率地不可理解的。 – EJP

+0

@EJP嘿嘿哈哈。你说得对,我的问题标题不正确,无论如何,就字面意义而言。我会改变它。也许'重建/创造一个不可变的......'至于其他所有的东西都是不可理解的,这显然只是一个讽刺的评论。不知道这怎么会有所帮助。如果它是有用的,请详细说明,否则不知道为什么你提到它。感谢标题提示尽管如此。 –

+0

@EJP好的,谢谢你的驾驶! –

回答

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

它修复并发性错误。

我仍然不确定我的方法是否正确。所以即使这个问题大部分得到解答,意见仍然非常受欢迎。

相关问题