考虑以下课程:
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
....
答案 0 :(得分:0)
考虑到它 - 我是传递值的受害者 - 引用按值复制到集合中 - 因此setter中的后续更新不会影响它们。业余错误......
答案 1 :(得分:0)
我无法提供一个我会采用的解决方案,因为我的问题不是很清楚。我建议创建一个holder对象来存储A
和B
的引用:
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);
}
}
在这种情况下,A
和B
的引用将由已经在列表中的持有者存储。