对于我的项目,我有一个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()给我的是子类,而不是我想要的类。
我该如何处理这个问题呢?谢谢
发布于 2013-12-25 21:06:19
谢谢你们的帮助,我做到了:
public void post(Event event, Class<?> type) {}
this.post(new EntityDamageByEntityEvent(), EntityDamage.class);发布于 2013-12-25 20:45:35
遍历子类祖先,直到找到映射中的某个人为止。
for (Class<T> klass = event.getClass(); klass!=null; klass=klass.getSuperclass()) {
MyClass c = map.get(klass);
if (c!=null) return c;
}
return null;发布于 2013-12-25 20:45:00
替换
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent();使用
Event event = new Event();https://stackoverflow.com/questions/20776586
复制相似问题