У меня есть POJO, указанный как: MyClass<U>
, где U
- это типовой параметр типа. Я пытаюсь написать метод утилиты, который принимает ссылку класса Class<T>
и заполняет карту типа Map<String, T>
(принимает карту для заполнения).Java Generics: как указать тип класса для типичного типизированного класса?
Этот метод реализуется как:
static void populateMap(Map<String, T> map, Class<T> type) {
...
// Parses into the specified type and returns an object of that type.
T obj = parse(..., type);
map.put (key, obj);
...
return map;
}
Это нормально компилируется. В моем абоненте я пытаюсь заполнить карту любым экземпляром MyClass
(независимо от типа) в качестве значения. Поэтому я использую следующий код:
// Loses type information
Map<String, MyClass<?>> m = new HashMap<>();
populateMap(m, MyClass.class);
Это не скомпилировано. Ошибка компиляции:
The method
populate(Map<String,T>, Class<T>)
in the type ... is not applicable for the arguments(Map<String,MyClass<?>>, Class<MyClass>)
Как это исправить?
Дон» Вы думаете, что при объявлении карты вам нужны фактические типы, а не общие шаблоны? –
Вы должны использовать T везде для этого типа. Можете ли вы вставить полный класс? – Lokesh
@JunedAhsan Нет, я должен был бы создать карту, содержащую все типы экземпляров MyClass. Вот почему я указал шаблон. – Neel