java – 我使用instanceof“错误”吗?

因此,在我的一个简单的游戏引擎中,我使用接口“UpdatedGameElement”来表示必须通过update()方法的实现每帧更新具有该接口的对象.

现在在我的“main”(不是主要的)类中,我遍历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();
    }
}

最佳答案 如果OP有邀请:

如果使用接口除了向GE添加标记和更新方法之外没有其他原因,并且除了在单个instanceof之后不使用类型UGE,那么这是具有这些额外类型的弱理由.特别是当更新的能力可以扩展到所有其他GE时,它只是一个NOOP.

基类中的抽象方法强制程序员决定是否需要为特定子类编码更新.从“防御性设计”的角度来看,这种方法相当“安全”.但是,当然,你写了更多的代码.

与之前的技术相反:如果忘记界面,则不会发出警报.

此外,如果您在基类中编写NOOP更新方法,并依赖程序员的快捷方式在必要时覆盖:方便,但在您忘记执行时有风险.

总结:有一些微妙的专业人士和骗子 – 不仅仅是“嗅觉”的实例.

点赞