Java 比较类类型与继承
对于我的项目,我有一个HashMap,其中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
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);