我想在java中制作一个小游戏。我创建了一个我称为Game
的类和一些子类。我将子类Body
用于游戏中的各种对象。我想在Game
中使用一个方法来生成对象。此方法应添加对列表的引用,以便稍后可以计算与其他实体的交互。
Game类看起来像这样:
import java.util.*;
class Game {
public List<Body> bodies = new ArrayList<Body>();
public void spawn( Body body ) {
bodies.add( body );
}
}
是的,我认为这很有效。现在我希望能够去除尸体。我试过这个:
import java.util.*;
class Game {
public List<Body> bodies = new ArrayList<Body>();
public void spawn( Body body ) {
bodies.add( body );
}
public void despawn( Body body ) {
body = null;
}
}
它没有按预期工作。我想它只是删除了对该对象的引用,如果这是正确的我不知道如何删除对该对象的所有引用。我想我可以迭代数组,但这似乎很愚蠢,因为我有一个对实际对象的引用。我不应该摧毁它吗?更优雅的替代品?
答案 0 :(得分:2)
public void despawn( Body body ) {
body = null;
}
在此,您只需将body
的值设置为null
,即可传递给public void despawn( Body body ) {
if(body != null && !bodies.isEmpty()){
bodies.remove(body);
}
}
。
你能做的就是打电话:
body
假设您还处理了传递给方法的对象,那么将删除内存中出现的所有{{1}}。
答案 1 :(得分:1)
body = null;
唯一要做的就是设置despawn
对body
的本地null
引用。它不会影响实际对象。
要从bodies
List
中删除它,请拨打bodies
上的remove
method,并将body
作为参数传递。确保您的Body
课程覆盖equals
中的Object
方法,以便列表可以正确找到要删除的匹配项。
一旦bodies
不再有引用,并且despawn
方法完成,并且对“despawn”对象的任何其他引用超出范围或重新分配,则删除的对象将符合条件用于垃圾收集。垃圾收集器会在没有任何引用之后将其销毁。