java - 实体 Sprite 怪物实体实例...就这么简单但不起作用?

标签 java inheritance casting instanceof

我有这样的代码:

class Entity;

class EntityTool extends Entity;
class EntitySprite extends Entity;

class EntityToolSpoon extends EntityTool;
class EntityToolBow extends EntityTool;
class EntitySpritePlayer extends EntitySprite;
class EntitySpriteMonster extends EntitySprite;

现在我在 Entity 中有一个名为 move() 的方法,其他一些方法会覆盖它。

现在,如果参数是 EntitySpriteMonster,为什么这不起作用:

public void foonction(Object wut)
{
    if (wut instanceof Entity) ((Entity)wut).move(x,y);
}

移动函数(尽管这是多余且不必要的。它在 if rawpeek instanceof... 处失败):

@Override
public void move(double x, double y) {
    super.move(x, y);
    for (int i=0; i<8; i++) {
        Object rawpeek = palette.get(i);
        System.out.println(rawpeek);
        if (rawpeek == null) continue;
        if (rawpeek instanceof Entity)
            ((Entity) rawpeek).move(x, y);
    }
}

编辑:它只是中止。 (操作符instanceof返回false)

Eclipse 在调试中向我展示,wut 绝对是一个 EntitySpriteMonster

最佳答案

我知道这样的代码失败的唯一原因(当 wut 已被验证为正确类型时)是 wut 的类是由与您的类中的 Entity 不同的类加载器加载的。

Java 中的类由其包名称、简单名称加载它的类加载器来标识。因此,mypackage.Entity 可能mypackage.Entity如果是由单独的类加载器加载的不同。

这通常仅在您使用某种插件机制(OSGi,...)时才会发生。你用过这样的东西吗?

关于java - 实体 Sprite 怪物实体实例...就这么简单但不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6647387/

相关文章:

Java EE 与 .NET 集成以进行身份​​验证

c# - 来自 Eric Lippert 采访的谜题 : Inheritance and Generic Type Setting

C 字符串到 int 无需任何库

c - 获取变量的十六进制地址作为 uintptr_t

java - 方法解释

java - 按位与运算符的结果可以为负吗(Java 中)

java - Esper窗口使用: Recalculation based on event leaving window

java - List<Dog> 是 List<Animal> 的子类吗?为什么 Java 泛型不是隐式多态的?

c# - EF 代码优先的 RelationShip 错误

java - 将对象转换为 Integer,string ,