2017-04-19 105 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]); 
    } 
} 

它修復併發性錯誤。

我仍然不確定我的方法是否正確。所以即使這個問題大部分得到解答,意見仍然非常受歡迎。

相關問題