请考虑以下代码:

ArrayClass<someClass> list = new ArrayList<someClass>();
//Consider this list has been filled somewhere else

someClass selectedObject = null;

public void userAction(float x, float y){
    selectedObject = findObject(x, y);
}

public someClass findObject(float x, float y){
    for(int i=0; i<list.size(); i++)
       if( --objects match-- )
           return list.get(i);

    return null;
}

问题是我在其他地方使用了selectedObject,我需要知道它指向的对象仍然存在。我注意到,当删除列表中selectObject所指向的对象时,selectedObjects保留了它以前指向的对象的属性(该属性不再存在)。一旦将对象从列表中删除,我需要selectedObject指向null。我该如何实现?

编辑1:澄清一下,发布的代码有效,这不是问题。问题在于,当指针指向列表中的对象时,selectedObject不会被更新。还有一件事,我无权访问从列表中删除对象的方法。

最佳答案

如果将selectedObject设为弱引用,则可以实现此目的:

WeakReference<someClass> selectedObject = null;

分配:
selectedObject = new WeakReference<someClass>(findObject(x, y));

查询:
someClass v = selectedObject.get();

如果将项目从列表中移除(并且未由任何其他“指针”引用),则selectedObject get()方法将返回null。

08-06 19:10