Mam POJO określone jako: MyClass<U>
, gdzie U
jest parametrem typu ogólnego. Próbuję napisać metodę narzędzia, która akceptuje odwołanie do klasy Class<T>
i zapełnia mapę typu Map<String, T>
(akceptuje mapę do wypełnienia).Java Generics: Jak określić typ klasy dla ogólnej klasy pisanej?
Metoda ta jest realizowana jak:
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;
}
To kompiluje grzywny. W moim programie wywołującym, próbuję wypełnić mapę dowolną instancją MyClass
(niezależnie od typu) jako wartością. Dlatego używam następującego kodu:
// Loses type information
Map<String, MyClass<?>> m = new HashMap<>();
populateMap(m, MyClass.class);
To nie kompiluje. Błąd kompilacji:
The method
populate(Map<String,T>, Class<T>)
in the type ... is not applicable for the arguments(Map<String,MyClass<?>>, Class<MyClass>)
Jak mogę to naprawić?
Don” Czy myślisz, że podczas deklarowania mapy potrzebujesz prawdziwych typów, a nie generycznych symboli wieloznacznych? –
Powinieneś używać T wszędzie dla tego typu. Czy możesz wkleić pełną klasę? – Lokesh
@JunedAhsan Nie, powinienem móc utworzyć mapę zawierającą dowolny typ instancji MyClass. Właśnie dlatego podałem symbol wieloznaczny. – Neel