Java Singleton枚举实例重置实例列表
有人能帮我解决enum单例实例的问题吗?实例列表被还原或清除,我不知道如何或为什么:Java Singleton枚举实例重置实例列表,java,enums,singleton,Java,Enums,Singleton,有人能帮我解决enum单例实例的问题吗?实例列表被还原或清除,我不知道如何或为什么: public enum ObjectMap { INSTANCE; ObjectMap() { this.displayObjectList = new ArrayList<DisplayObject>(); } private final List<DisplayObject> displayObjectList; public boolean addObject(fi
public enum ObjectMap {
INSTANCE;
ObjectMap() {
this.displayObjectList = new ArrayList<DisplayObject>();
}
private final List<DisplayObject> displayObjectList;
public boolean addObject(final DisplayObject paramDisplayObject) {
boolean success = false;
if (null != paramDisplayObject && !this.isTaken(paramDisplayObject.x, paramDisplayObject.y)) {
this.displayObjectList.add(paramDisplayObject);
success = true;
}
return success;
}
public boolean isTaken(final int paramX, final int paramY) {
for (final DisplayObject displayObject : this.displayObjectList) {
if (displayObject.x == paramX && displayObject.y == paramY) {
return true;
}
}
return false;
}
我试过了,没有问题。但这实际上取决于placeBomb()方法的功能。你也可以发布一下吗?@DennisHunziker它调用方法
ObjectMap.INSTANCE.addObject(displayObjectBomb)代码>在代码中的注释中,没有任何内容else@DennisHunziker好的,我检查了整个代码,发现一个线程应该在延迟后立即从列表中删除对象(这就是为什么我要执行thread.sleep(2010))。好的,这很有意义;-)你摘录的代码看起来不错,我试过了,没有问题。但这实际上取决于placeBomb()方法的功能。你也可以发布一下吗?@DennisHunziker它调用方法ObjectMap.INSTANCE.addObject(displayObjectBomb)代码>在代码中的注释中,没有任何内容else@DennisHunziker好的,我检查了整个代码,发现一个线程应该在延迟后立即从列表中删除对象(这就是为什么我要执行thread.sleep(2010))。好的,这很有意义;-)只需摘录中的代码就可以了。
@Test
public void testBombEvent() {
Player player = new Player(PLAYER_X, PLAYER_Y);
// calls ObjectMap.INSTANCE.addObject(DisplayObject bomb), debugging this successfully adds the object to the list
player.placeBomb();
// AssertionError because ObjectMap.INSTANCE.displayObjectList is empty???
Assert.assertTrue(ObjectMap.INSTANCE.isTaken(PLAYER_X, PLAYER_Y));
final DisplayObject object = ObjectMap.INSTANCE.getObject(PLAYER_X, PLAYER_Y);
Assert.assertEquals(object.objectType, GameObjectType.BOMB);
try {
Thread.sleep(2010);
Assert.assertFalse(ObjectMap.INSTANCE.isTaken(PLAYER_X, PLAYER_Y));
} catch (final InterruptedException e) {
}
}