请考虑以下代码:
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。