Для моего проекта у меня есть 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()
дает мне подкласс, а не класс, который я хочу.
Как я должен решить эту проблему? Благодаря
Вы можете использовать [Class.isAssignableFrom (класс > КНК)] (http://docs.oracle.com/javase/6/docs /api/java/lang/Class.html#isAssignableFrom%28java.lang.Class%29). –
Вы используете наследование, но вы не хотите, чтобы полиморфизм xD был хорошим .. – nachokk
@ElliottFrisch nice, я не знал об этом :) – nachokk