【发布时间】:2017-03-19 05:05:47
【问题描述】:
我只是想知道 Java 是否提供了允许以下内容的任何东西:
<Some List> list = new <Some List>;
Foo f = null;
list.add(f);
f = new Foo();
//Where this would be true
list.contains(f)
//As well as this (which is kind of implied by the contains call)
f == list.get(0)
据我所知,这不适用于任何 Java 列表。本质上,我问的是是否有一个集合类型会根据它们的外部引用更新它们的内部元素。在上面的示例中,我希望将 'f' 设置为 Foo 的新实例也将反映在列表条目中。这也意味着以下情况是正确的:
<Some List> list = new <Some List>;
Foo f = null;
list.add(f);
f = new Foo();
f.name = "banana";
//Where this would be true and not cause an NPE, as it does with List
f.name == list.get(0).name //Both would equal "banana"
这样的事情存在吗?
编辑:
为了澄清,添加到列表中的原始对象需要为空。然后更新该对象,并且该更新应反映在列表中。在上面的例子中,Foo变量一开始是null,当它仍然为null时被添加到列表中。添加后,我将其设置为 Foo 的新实例。我想知道是否有一个列表类型,当我实例化 Foo 时,它也会更新列表。
【问题讨论】:
-
为什么要在列表中添加
null,然后修改f?当您这样做时,您不会修改列表中的空条目。f是一个引用,reference 的副本存储在列表中,而不是对引用的引用。如果您需要 2 级间接,则必须将引用包装在一个类中并将该类的实例存储在列表中。