将类类型与继承进行比较

时间:2013-12-25 20:40:33

标签: java class inheritance

对于我的项目,我有一个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()给了我子类,而不是我想要的类。

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

4 个答案:

答案 0 :(得分:2)

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

for (Class<T> klass = event.getClass(); klass!=null; klass=klass.getSuperclass()) {
 MyClass c = map.get(klass);
 if (c!=null) return c;
}
return null;

答案 1 :(得分:0)

替换

EntityDamageByEntityEvent event = new EntityDamageByEntityEvent();

Event event = new Event();

答案 2 :(得分:0)

一个不同的想法:

使用要使用类的完全限定名称插入密钥的HashMap<String, MyClass>SubClass.class.getName()。在检索时,您可以使用Class.forName(key)来查找正确的类。

答案 3 :(得分:0)

感谢帮助人员,我已经做到了:

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

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