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!

questionAnswers(2)

yourAnswerToTheQuestion