Java 比较类类型与继承

Java 比较类类型与继承,java,class,inheritance,Java,Class,Inheritance,对于我的项目,我有一个HashMap,其中Class作为键,MyClass作为值 Map<Class<?>, MyClass> map = new HashMap<Class<?>, MyClass>(); 这是此密钥的继承树: class EntityDamageByEntityEvent extends EntityDamageEvent class EntityDamageEvent extends EntityEvent class En

对于我的项目,我有一个HashMap,其中
Class
作为键,
MyClass
作为值

Map<Class<?>, MyClass> map = new HashMap<Class<?>, 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()
给了我子类,而不是我想要的类

我应该如何解决这个问题?谢谢

更换

EntityDamageByEntityEvent event = new EntityDamageByEntityEvent();


迭代子类祖先,直到找到地图上的某个人

for (Class<T> klass = event.getClass(); klass!=null; klass=klass.getSuperclass()) {
 MyClass c = map.get(klass);
 if (c!=null) return c;
}
return null;
for(类klass=event.getClass();klass!=null;klass=klass.getSuperclass()){
MyClass c=map.get(klass);
如果(c!=null)返回c;
}
返回null;
一个不同的想法:


使用
HashMap
,其中要插入带有类的完全限定名的键:
SubClass.Class.getName()
。检索时,可以使用
Class.forName(key)
查找正确的类

谢谢大家的帮助,我已经做到了:

public void post(Event event, Class<?> type) {}

this.post(new EntityDamageByEntityEvent(), EntityDamage.class);
publicsvoidpost(事件,类类型){}
this.post(新的EntityDamageByEntityEvent(),EntityDamage.class);

你可以使用。你使用继承,但你不想要多态性xD nice..@elliotfrisch nice我不知道:)
getClass
只会给你实际对象的实际类。你应该重新考虑你的设计。正如已经指出的,这就是它的工作方式。@HotLicks你错了。我的等级制度倒退了
for (Class<T> klass = event.getClass(); klass!=null; klass=klass.getSuperclass()) {
 MyClass c = map.get(klass);
 if (c!=null) return c;
}
return null;
public void post(Event event, Class<?> type) {}

this.post(new EntityDamageByEntityEvent(), EntityDamage.class);