我有这样的代码:
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/