2015-11-10 3 views
0

Я пытаюсь создать небольшой 2D-игровой движок в Java.Java - лучший способ вызова метода каждого объекта в коллекции

Каждый тип объекта, который является сценой, расширяет класс «Объект», который имеет абстрактный метод «tick()». Кроме того, существует класс под названием «Сцена», в котором есть HashMap, содержащий все объекты сцены. Я хочу, чтобы сцена вызывала метод «tick()» каждого объекта в HashMap (60 раз в секунду).

public class Scene { 
    private HashMap<String, Object> objs; //HashMap containing all the objects 

    private void tick() { 
    for(Entry<String, Object> e : objs.entrySet()) { 
     Object o = e.value(); 
     o.tick(); 
    } 
    } 

    [...] 
} 

Теперь мне интересно, есть ли лучший, более элегантный способ достичь этого. Возможно, создав EventObject & EventListener или используя Observable и сделайте каждый объект Observer?

+2

Вы можете сделать 'objs.values ​​() Foreach (значение -> value.tick()). ; ' –

+2

Что бы я изменил первым, это имя класса Object. У вас будут постоянные столкновения со стандартным, автоматически импортированным классом java.lang.Object. –

+0

Итак, вы думаете, что использование цикла for - лучший/самый простой способ достичь этого? –

ответ

2
for (MyOb o: objs.values()) { 
    o.tick(); 
} 

Вы также можете сделать это с помощью потока API в Java 8:

objs.values().forEach(v -> v.tick()); 
Смежные вопросы