Evitar atribuição desmarcada em um mapa com vários tipos de valor?
Estou tendo problemas com um aviso no Java 7:
Unchecked assignment: 'java.lang.Class' to 'java.lang.Class<T>'
Estou colocando em jogoClass<T> type = typeMap.get(key);
na função get abaixo.
Basicamente, o que estou tentando fazer aqui é armazenar vários pares de chave / valor de tipos desconhecidos (mas todos são descendentes de Object, com exceção de null), mas não perdemos o tipo. Então, eu criei uma classe com o seguinte conteúdo usando genéricos. Possui dois mapas (um para armazenar os dados e outro para armazenar o tipo de classe:
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));
}
Funciona muito bem, mas o aviso está me irritando. Existe alguma maneira de o Java fazer essa conversão sem reclamar (além de suprimi-lo)? Ou existe uma maneira melhor de realizar o que estou tentando fazer? Que tal no Java 8, como eu ainda não tive a chance de mergulhar nele?
Obrigado!