添加未初始化的对集合的引用,然后初始化它

时间:2014-02-21 15:16:57

标签: java

考虑以下课程:

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引用的集合 - 尚未调用setter。

我需要的是,一旦调用了setter,引用就不再是null。基本上我需要一些间接 - 所以这是使用像Atomic Reference这样的东西的唯一方法吗?

上下文,如果你需要它,我有一个管理两种类型对象的类 - 它们都是在启动时注入的(通过调用setter),但它们大致分为两组 - 稍后我点迭代列表来做某些事情 - 但是当我这样做时,尽管调用了setter,内容是null ....

2 个答案:

答案 0 :(得分:0)

考虑到它 - 我是传递值的受害者 - 引用按值复制到集合中 - 因此setter中的后续更新不会影响它们。业余错误......

答案 1 :(得分:0)

我无法提供一个我会采用的解决方案,因为我的问题不是很清楚。我建议创建一个holder对象来存储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的引用将由已经在列表中的持有者存储。