我在 Java 中有一个 ArrayList。现在,我想访问指向上述列表的指针。这样我就可以从指针中创建一个变量并使用它进行操作。关于如何做到这一点的任何建议?
我想要做的类似于使下面的“列表”始终指向“someOtherList”的值。
import java.util.ArrayList;
import java.util.List;
public class ListContainingObject {
    private List list;
    public List getList() {
        return list;
    }
    public void setList(List list) {
        this.list = list;
    }
    public static void main(String args[]){
        ListContainingObject listContainingObject= new ListContainingObject();
        System.out.println(listContainingObject.getList());
        List someOtherList = new ArrayList();
        listContainingObject.setList(someOtherList);
        System.out.println(listContainingObject.getList());
        System.out.println(someOtherList);
        someOtherList.add("1");
        System.out.println(listContainingObject.getList());
        System.out.println(someOtherList);
        //I want the two below to have the same value
        someOtherList = new ArrayList();
        System.out.println(listContainingObject.getList());
        System.out.println(someOtherList);
    }
}
看似合适的解决方法是再次显式调用设置器,如下所示。
public class ListContainingObject {
    public void resetList(List toReset) {
        this.list = new ArrayList();
        toReset = this.list;
    }
}
listContainingObject.resetList(someOtherList);
但这会导致另一个问题,假设我没有 SomeOtherListContainingObjectWhichIsABlackBox 的源代码,我希望下面的 solcowiab.getList() 和 listContainingObject.getList() 始终相同。
import java.util.ArrayList;
import java.util.List;
    public class ListContainingObject {
    private List list;
    public List getList() {
        return list;
    }
    public void setList(List list) {
        this.list = list;
    }
    public static void main(String args[]) {
        ListContainingObject listContainingObject = new ListContainingObject();
        SomeOtherListContainingObjectWhichIsABlackBox solcowiab = new SomeOtherListContainingObjectWhichIsABlackBox();
        List aNewList = new ArrayList();
        aNewList.add("1");
        solcowiab.setList(aNewList);
        listContainingObject.setList(solcowiab.getList());
        System.out.println(listContainingObject.getList());
        System.out.println(solcowiab.getList());
        //The two below will have the same value but
        //at some point "list" did not point to "someOtherList"
        solcowiab.aMethodThatSupposedlyWontCallSetList();
        listContainingObject.setList(solcowiab.getList());
        System.out.println(listContainingObject.getList());
        System.out.println(solcowiab.getList());
    }
}
class SomeOtherListContainingObjectWhichIsABlackBox {
    private List someOtherList;
    public List getList() {
        return someOtherList;
    }
    public void setList(List list) {
        this.someOtherList = list;
    }
    public void aMethodThatSupposedlyWontCallSetList() {
        //this one won't be observed by ListContainingObject
        setList(new ArrayList());
        getList().add("2");
        //do some other stuff
        //only this assignment will be controlled by ListContainingObject's main method
        setList(new ArrayList());
    }
}