【发布时间】:2014-03-14 01:13:15
【问题描述】:
目前我有这段代码工作但重复:
Iterator<Moo> it6 = moos.iterator();
while (it6.hasNext()) {
Moo m = it6.next();
m.update();
if (!m.isActive())
it6.remove();
}
Iterator<Pip> it7 = pips.iterator();
while (it7.hasNext()) {
Pip s = it7.next();
s.update();
if (!s.isActive())
it7.remove();
}
... and other ...
在该类上定义点数和moos:
public class GameEngine {
private ArrayList<Moo> moos;
private ArrayList<Pip> pips;
...
还有 Moo/Pip 类:
public class Moo extends GameSprite {
...
public class Pip extends GameSprite {
...
我可以使用一些设计模式(或一些不同的实现)来减少编写代码并使其更优雅吗?
【问题讨论】:
-
isActive()和update()是否在GameSprite中声明? -
您需要添加更多信息。仅仅添加类的声明并没有多大帮助。
isActive()定义在哪里。你在哪里有这些代码?除了从ArrayList中删除元素之外,这些代码到底在做什么? -
@MarkPeters 所说的。如果是,并且如果你准备好使用外部库,Guava 有
Iterables.removeIf()。 -
isActive() 在 GameSprite 上声明,update 是在 GameSprite 上声明但在 Pip 和 Moo 上实现的抽象方法
标签: java design-patterns arraylist iterator abstract