2014-02-21 92 views
0

考慮下面的類:添加未初始化的參考集合,然後初始化它

public class Test { 
    List<Object> colectionA = new LinkedList<>(); 
    List<Object> colectionB = new LinkedList<>(); 
    Object A; 
    Object B; 

    { 
     collectionA.add(A); 
     collectionB.add(B); 
    } 

    public void setA{..standard..} 
    public void setB{..standard..} 
} 

現在,實例化這個類的時候,我結束了含有null參考兩個集合 - 的制定者並沒有被稱爲尚未。

我需要的是,一旦調用者被調用,引用不再是null。從本質上講,我需要一些間接 - 這是唯一的方法來使用像Atomic Reference這樣的東西嗎?上下文,如果你需要的話,是我有一個類來管理兩種類型的對象 - 它們都是在啓動時(通過調用者)注入的,但它們大致分爲兩組 - 在一個組中後一點上,我遍歷列表做某些事情 - 但是當我這樣做,儘管制定者被稱爲內容是null ....

+0

你是否打電話給二傳手?田地是否被注入?在制定者中有什麼? –

+0

我寧可建議在默認情況下,不要將A和B添加到集合中,而只能在setter中添加。在那裏可以檢查A/B字段是否有舊值,如果是的話可以先從集合中刪除 – fejese

+0

setters是正常的 - 他們只是在類中設置值。他們被稱爲。 – PaulJWilliams

回答

0

已經想過這個問題 - 通過值Im通的受害者 - 引用按值複製到集合中 - 所以setter中的後續更新不會影響它們。業餘的錯誤....

0

我不能給一個解決方案,我會採用,因爲你的問題不是很清楚。我的建議是建立一個持有者對象存儲的AB引用:

public class Test { 
     List<Object> colectionA = new LinkedList<>(); 
     List<Object> colectionB = new LinkedList<>(); 
     Holder<Object> holderA; 
     Holder<Object> holderB; 

     { 
      collectionA.add(holderA); 
      collectionB.add(holderB); 
     } 

     public void setA(Object a) { 
      this.holderA.set(a); 
     } 

     public void setB(Object b) { 
      this.holderB.set(b); 
     } 
    } 

在這種情況下,AB引用將通過已經在列表中的人進行存儲。