У меня возникают проблемы с предупреждением в Java 7:
Unchecked assignment: 'java.lang.Class' to 'java.lang.Class<T>'
Я получаю его на линии Class<T> type = typeMap.get(key);
в функции get ниже.
В основном, что я пытаюсь сделать здесь, я хочу хранить кучу пар ключ/значение неизвестных типов (но все они являются потомками Object, за исключением null), но не теряют тип. Поэтому я создал класс со следующим контентом с использованием дженериков. Он имеет две карты (один для хранения данных и один для хранения типа класса:
private Map<String, Object> dataMap = new HashMap<>();
private Map<String, Class> typeMap = new HashMap<>();
public <T> void put(String key, T instance){
dataMap.put(key, instance);
if (instance == null){
typeMap.put(key,null);
}
else {
typeMap.put(key, instance.getClass());
}
}
public <T> T get(String key){
Class<T> type = typeMap.get(key);
if (type == null){
return null;
}
return type.cast(dataMap.get(key));
}
Он работает отлично, но предупреждение раздражает меня. Есть ли способ заставить Java делать это приведение без жалобы (кроме подавления)? Или есть лучший способ добиться того, что я пытаюсь сделать? Как насчет в Java 8, поскольку у меня еще не было возможности погрузиться в нее?
Спасибо!