Как передать класс <Descendant>в Hashmap? - PullRequest
1 голос
/ 30 мая 2019

Я заполняю объект HashMap парами типа <String, Class<Ancestor>>, где Ancestor - некоторый пользовательский класс.Идея заключается в создании объекта из имени микросервиса.

Я получаю ошибку компиляции, когда выдает следующее:

EDITED

map.put("some label", Descendant.class);

Очевидно, что класс HashMap ожидает настоящий класс Ancestor, а не любой класс Descendant, который расширяет Ancestor.

Поскольку у меня есть десятки различных классов-потомков (микросервисы), кто-нибудь делает?можете подсказать, как избежать этого ограничения с помощью HashMap?

Я пытался использовать Class<?> вместо Class<Ancestor> в объявлении HashMap.Но затем Eclipse выдает предупреждение о кастинге при вызове микросервиса

Class<Ancestor> a = (Class<Ancestor>) map.get("some label");

Странное предупреждение гласит:

Type safety: unchecked cast from Class <capture#151-of ?> to Class <Ancestor>

1 Ответ

1 голос
/ 30 мая 2019

Вы можете попробовать сделать универсальный параметр Class ковариантным, используя HashMap<String, Class<? extends Ancestor>>.

. И вы не должны разыгрывать Class you get от map до * 1008.*, просто используйте его как Class<? extends Ancestor>:

Class<? extends Ancestor> clazz = map.get("...");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...