对于我的项目,我有一个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()
给了我子类,而不是我想要的类。
我该如何解决这个问题?感谢
答案 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);