Вот код, который не компилируется. Я хотел бы содержать произвольные пары Class<?>
(ключ) и Map<Long, ObjectDescriptors<?>>
(значения) внутри typeMap;
Из других методов я хочу использовать одну из карт значений с конкретным типом, но алгоритмы должны быть общими. Я написал метод getIdentityMap()
для доставки карты с конкретным, но универсальным типом.
Как мне изменить код для компиляции, будучи универсальным?
Заранее спасибо.
private final Map<Class<?>, Map<Long, ObjectDescriptor<?>>> typeMap = new HashMap<Class<?>, Map<Long,ObjectDescriptor<?>>();
private <T> Map<Long, ObjectDescriptor<T>> getIdentityMap(Class<T> type) {
Map<Long, ObjectDescriptor<T>> identityMap = typeMap.get(type);
if (identityMap == null) {
identityMap = new HashMap<Long, ObjectDescriptor<T>>();
typeMap.put(type, identityMap);
}
return identityMap;
}
РЕДАКТИРОВАТЬ: Вот ошибки компилятора:
- В строке:
Map<Long, ObjectDescriptor<OBJECT_TYPE>> identityMap = typeMap.get(type);
- ошибка компилятора:
Type mismatch: cannot convert from Map<Long,ObjectDescriptor<Object>> to Map<Long,ObjectDescriptor<OBJECT_TYPE>>
- В строке:
typeMap.put(type, identityMap);
- ошибка компилятора:
The method put(Class<?>, Map<Long,ObjectDescriptor<Object>>) in the type Map<Class<?>,Map<Long,ObjectDescriptor<Object>>> is not applicable for the arguments (Class<OBJECT_TYPE>, Map<Long,ObjectDescriptor<OBJECT_TYPE>>)
РЕДАКТИРОВАТЬ: изменил общие типы атрибута карты в?