首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类类型与继承的比较

类类型与继承的比较
EN

Stack Overflow用户
提问于 2013-12-25 20:40:32
回答 4查看 102关注 0票数 2

对于我的项目,我有一个HashMap,Class<?>作为键,MyClass作为值。

代码语言:javascript
复制
Map<Class<?>, MyClass> map = new HashMap<Class<?>, MyClass>();

举个例子,我提出了一些价值:

代码语言:javascript
复制
map.put(EntityDamageEvent.getClass(), new MyClass());

这是该键的继承树:

代码语言:javascript
复制
class EntityDamageByEntityEvent extends EntityDamageEvent
class EntityDamageEvent extends EntityEvent
class EntityEvent extends Event

当我试图从映射中获取一个值时,问题就出现了,但是键恰好是我实际上试图使用的键的子类:

代码语言:javascript
复制
void doSomething() {
    EntityDamageByEntityEvent event = new EntityDamageByEntityEvent();

    post(event); //This returns null
}

MyClass post(Event event) {
    return map.get(event.getClass());
}

Object.getclass()给我的是子类,而不是我想要的类。

我该如何处理这个问题呢?谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-12-25 21:06:19

谢谢你们的帮助,我做到了:

代码语言:javascript
复制
public void post(Event event, Class<?> type) {}

this.post(new EntityDamageByEntityEvent(), EntityDamage.class);
票数 0
EN

Stack Overflow用户

发布于 2013-12-25 20:45:35

遍历子类祖先,直到找到映射中的某个人为止。

代码语言:javascript
复制
for (Class<T> klass = event.getClass(); klass!=null; klass=klass.getSuperclass()) {
 MyClass c = map.get(klass);
 if (c!=null) return c;
}
return null;
票数 2
EN

Stack Overflow用户

发布于 2013-12-25 20:45:00

替换

代码语言:javascript
复制
EntityDamageByEntityEvent event = new EntityDamageByEntityEvent();

使用

代码语言:javascript
复制
Event event = new Event();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20776586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档