Java 重新/创建包含不可变对象列表的不可变对象

Java 重新/创建包含不可变对象列表的不可变对象,java,android,immutability,Java,Android,Immutability,背景 我试图创建一个不可变对象,它包含一个不可变对象列表,以及列表中的对象类型总数 我创造了一个稍微sudo的要点,试图展示我的意思 解释 我的例子显示了我目前是如何做的,它确实有效。然而,并非所有情况都如此 My将有一个recyclerview,其中填充了一个新的/已保存的 每个蔬菜车都有一个蔬菜清单。蔬菜总数等 然后我有了一个helper类,它包含一个rx.Consumer,可以设置并接受来自veggie视图的任何1:1 veggie更改 VeggieCartView设置消费者,因此当任何

背景

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

我创造了一个稍微sudo的要点,试图展示我的意思

解释

我的例子显示了我目前是如何做的,它确实有效。然而,并非所有情况都如此

My将有一个recyclerview,其中填充了一个新的/已保存的

每个蔬菜车都有一个蔬菜清单。蔬菜总数等

然后我有了一个helper类,它包含一个
rx.Consumer
,可以设置并接受来自veggie视图的任何1:1 veggie更改

VeggieCartView设置消费者,因此当任何一个veggie更改时,它会使用更改的对应购物车工厂方法创建更新的购物车。适配器用于更改/检索其列表

正在工作而未工作

这对于一次更改一个非常有效,但是批处理更改会引发并发异常

我意识到我的要点是不可运行的,并且没有显示大多数样板文件,而且我可能对我的一些或所有方法有根本性的错误。尽管如此,我还是希望有人能给我一些建议,告诉我如何更好地实施我正在努力做的事情

如果需要了解更多信息,请询问。感谢所有能提供帮助的人


乔恩。

我终于弄明白了我的主要问题

通过将此添加到我的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]);
  }
}
public void bagAllCanned(){
最终蔬菜[]罐装=新蔬菜[cart.canTotal()];
最终蔬菜[]袋装=新蔬菜[罐装长度];
int t=0;
最终列表veggies=cart.vegies();
对于(int i=0;i
它修复了并发错误


我仍然不确定我的方法是否正确。因此,尽管这个问题大部分都得到了回答,但意见仍然非常受欢迎。

调整一个不变的对象在术语上是矛盾的。其余的都是无法理解的。@EJP Yikes lol。你是对的,我的问题标题在字面意义上是不正确的。我会换的。也许“重建/创造一个不变的…”至于其他一切都是不可理解的,这显然只是一个讽刺的评论。我不知道这会有什么帮助。如果这是为了有所帮助,请详细说明,否则不知道你为什么提到它。尽管如此,还是谢谢你的标题提示。@EJP好的,谢谢你的路过!