此类包含characters
内的所有objects
和level
。
CollisionListener
是一个接口,只要角色与另一个对象发生碰撞,就会调用CollisionListener.beginContact()
。
我想知道,因为我将level
传递给CollisionListener
,这是否意味着2个对象存储在内存中?
或private Level level
内的CollisionListener
只是对原始level
的引用?这是如何由JVM内部处理的?
因为我在level
内修改CollisionListener
,原来的level
也会更新。
public class Level extends World {
private Player player;
private Enemy enemy;
public Level(){
this.setContactListener(
new CollisionListener(this));
player = new Player();
enemy = new Enemy();
}
/**
* Move characters
*/
public update(){
player.update();
enemy.update();
}
}
这是interface
,已添加到我的Level
对象中。它需要引用Level
对象,因此可以调用level.doSomething()
。
public class CollisionListener implements ContactListener{
private Level level;
public CollisionListener(Level level){
this.level = level;
}
public void beginContact(Contact contact) {
this.level.doSomething();
}
/* other interface methods .. */
}
答案 0 :(得分:0)
或者CollisionListener中的私有级别只是对原始级别的引用?这是如何由JVM内部处理的?
当然是。您始终只处理对象的引用并复制它们。就C / C ++而言,您可以将引用与指针进行比较。
因为当我在CollisionListener中修改级别时,原始级别也会更新。
如果您不希望这种情况发生,请创建Level
实例的副本,例如使用Clonable
界面。