如果我有一个类自己删除,它的内部方法是否应该停止执行?我有一个 B 类,它告诉 A 类从 A 的 ArrayList 中删除 B。我相当肯定 B 只存在于 A 的 ArrayList 中,所以当我删除它时,它应该被删除,对吗?(注意:我已经包含了一个 Serializable 实现,以防万一这与 VM 如何处理我的类有关,但我没有在此处编写 read- 和 writeObject 方法。我怀疑它与不过这个问题。)
public class A implements Serializable, B_Listener {
ArrayList<B> bArray;
public A() {
bArray = new ArrayList<SomeObject>();
bArray.add(new B(bArray.size(), this));
}
@Override
public void deleteAtIndex(int index) {
bArray.remove(index);
}
}
public class B implements Serializable {
B_Listener listener;
int index;
public B(B_Listener listener, int index) {
this.listener = listener;
this.index = index;
}
//This is called at some point in a B's lifetime.
private void selfDestruct() {
listener.deleteAtIndex(index);
Log.w("B.class", "Should this not output? It does.");
}
}
public interface B_Listener {
public void deleteAtIndex(int index);
}
所以当我不相信它应该执行 Log.w 消息时。因此,恐怕我正在创建 java 的内存泄漏。我查看并查看了整个代码,试图找到 B 可能被指针保存的位置,但除了我想要的之外,我什么也没想到。
那么我问垃圾收集的时间是否与我最终删除 B 的时间不同。如果是这种情况,那么暂时可以肯定地说我实际上并没有持有我不打算持有的物体吗?
额外的(注意:这可能很难理解,上面的所有内容都应该足以解决问题):我也用 Android-Views 标记了这个,因为我正在 Android 上开发:我的 B 类包含指向 B 的 View 对象听众。我相信当我删除视图时,视图管理器或任何 Android 都不应再指向视图,当我删除 B 时,它的所有内部视图也应该被删除,这意味着它们不能再通过自己的侦听器来保持 B 的存在指针。我只是说出来看看我的理解是否正确。