在我的简单游戏引擎中,我使用一个名为“UpdatedGameElement”的接口来向对象发出信号,表明该对象必须通过update()方法在每个帧中更新。现在,在我的“main”类中,我遍历了一个GameElement列表,并检查它们是否是UpdatedGameElement的实例。如果是这种情况,我会强制转换它们,然后调用.update()方法。
现在问题是,我刚刚读到,使用instanceof通常是糟糕编码的标志;在类被用作标记时可以轻松替换为变量的情况下,我同意。但对于我的情况,我不是很确定。
我想,我可以让GameElement类实现UpdatedGameElement,并定义一个标准的空update()方法,需要覆盖以实际执行某些操作,但我不确定那是否比我现在拥有的更好。
你怎么看?
现在问题是,我刚刚读到,使用instanceof通常是糟糕编码的标志;在类被用作标记时可以轻松替换为变量的情况下,我同意。但对于我的情况,我不是很确定。
我想,我可以让GameElement类实现UpdatedGameElement,并定义一个标准的空update()方法,需要覆盖以实际执行某些操作,但我不确定那是否比我现在拥有的更好。
你怎么看?
public void process()
{
if (active)
{
for (GameElement GE: elements)
{
if (!GE.isToBeRemoved())
{
//Relevant part
if (GE instanceof UpdatedGameElement)
{
((UpdatedGameElement) GE).update();
}
}
else
{
prepareRemoval(GE);
}
}
processRemovals();
}
}
instanceof
并不一定是坏的,但这种情况表明你最好持有一个单独的数据结构,其中只包含可更新的对象。 - chrylis -cautiouslyoptimistic-