【发布时间】:2013-12-25 20:40:32
【问题描述】:
对于我的项目,我有一个 HashMap,其中 Class<?> 作为键,MyClass 作为值。
Map<Class<?>, MyClass> map = new HashMap<Class<?>, MyClass>();
作为一个例子,我输入了一些值:
map.put(EntityDamageEvent.getClass(), new MyClass());
这是这个键的继承树:
class EntityDamageByEntityEvent extends EntityDamageEvent
class EntityDamageEvent extends EntityEvent
class EntityEvent extends Event
当我尝试从映射中获取值时出现问题,但键恰好是我实际尝试使用的键的子类:
void doSomething() {
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent();
post(event); //This returns null
}
MyClass post(Event event) {
return map.get(event.getClass());
}
Object.getclass() 给了我子类,而不是我想要的类。
我应该如何解决这个问题?谢谢
【问题讨论】:
-
你使用继承,但你不想要多态性 xD nice..
-
@ElliottFrisch 很好,我不知道 :)
-
getClass只会为您提供实际对象的实际类。 -
你应该重新考虑你的设计。正如已经指出的那样,这就是它的工作方式。
标签: java class inheritance