Java有效地删除对象
我想用java做一个小游戏。我创建了一个我称之为Java有效地删除对象,java,Java,我想用java做一个小游戏。我创建了一个我称之为Game的类和一些子类。我将子类Body用于游戏中的各种对象。我想在游戏中为生成对象提供一个方法。此方法应添加对列表的引用,以便以后可以计算与其他实体的交互 游戏类的外观如下所示: import java.util.*; class Game { public List<Body> bodies = new ArrayList<Body>(); public void spawn( Body body
Game
的类和一些子类。我将子类Body
用于游戏中的各种对象。我想在游戏
中为生成对象提供一个方法。此方法应添加对列表的引用,以便以后可以计算与其他实体的交互
游戏类的外观如下所示:
import java.util.*;
class Game {
public List<Body> bodies = new ArrayList<Body>();
public void spawn( Body body ) {
bodies.add( body );
}
}
import java.util.*;
班级游戏{
public List bodies=new ArrayList();
公共虚空繁殖(身体){
主体。添加(主体);
}
}
是的,我认为这是可行的。现在我想也能把尸体拆了。我试过这个:
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;
}
}
import java.util.*;
班级游戏{
public List bodies=new ArrayList();
公共虚空繁殖(身体){
主体。添加(主体);
}
公共空间被剥夺(主体){
body=null;
}
}
它没有按预期工作。我猜它只是删除了对对象的引用,如果这是正确的,我将不知道如何删除对对象的所有引用。我想我可以迭代数组,但这看起来很愚蠢,因为我有一个对实际对象的引用。难道我不能摧毁它吗?更优雅的选择?唯一的
body=null
正在做的是将despawn
的本地正文
引用设置为null
。它不会影响实际对象
要将其从body
列表中删除,请调用body
,将body
作为参数传递。确保您的Body
类覆盖对象中的equals
方法,以便列表可以正确找到要删除的匹配项
一旦body
不再有引用,并且despawn
方法完成,并且对要“despawn”的对象的任何其他引用超出范围或被重新分配,则删除的对象将有资格进行垃圾收集。它将在不再有任何引用后被垃圾收集器销毁
public void despawn( Body body ) {
body = null;
}
这里,您只是将作为参数传入的body
的值设置为null
你能做的就是打电话:
public void despawn( Body body ) {
if(body != null && !bodies.isEmpty()){
bodies.remove(body);
}
}
这将删除内存中所有出现的body
,假设您也处理传递到方法中的对象。@SamuelWillems列表中仍有对该对象的引用,因此除非将其删除,否则GC将永远不会清理该对象。当然,一旦传入body
参数,该对象也必须超出范围或被取消引用才能被GC清理。是的,谢谢,我明白了。愚蠢的我甚至不知道有一个函数是这样工作的。我习惯用钥匙,这对我来说有点奇怪。不过非常感谢!