Retornar uma instância de classe com seu tipo genérico

Aqui está um exemplo simples que demonstra um problema relacionado ao apagamento de tipo que estou enfrentando. Eu tenho uma classe como esta:

public abstract class AbstractHandler<T> {

    ...
    public abstract Class<T> handledType();
}

Então eu tenho esta implementação:

public class ConcreteHandler extends AbstractHandler<Map<String, List<Thing>>> {

    @Override
    public Class<Map<String, List<Thing>>> handledType() {
        //what do I return here?!
    }
}

Não posso voltarMap<String, List<Thing>>.class, já que isso nem é válido sintaticamente. Eu tentei fazer o parâmetro-tipo genérico no subtipo para serHashMap<String, List<Thing>> e depois retornandonew HashMap<String, List<Thing>>().getClass(), mas isso não funciona porque o tipo de retorno deClass<T>#getClass() éClass<? extends T>. Eu olheiTypeToken da goiaba e dagetRawType parecia promissor, mas retornaClass<? super T>.

Por enquanto, tenho uma solução alternativa que se parece com isso:

public class ThingListMap {
    private Map<String, List<Thing>> thingListMap;

    ...
}

e eu apenas usoThingListMap como o parâmetro-tipo genérico.

Outra solução possível é executar uma conversão forçada:

public Class<Map<String, List<Thing>>> handledType() {
    return (Class<Map<String, List<Thing>>>) new HashMap<String, List<Thing>>().getClass();
}

Existe uma maneira mais elegante de fazer isso?

EDITAR: Em resposta a uma das respostas, não posso alterar a assinatura dohandledType método desde que eu não possuo ou controle sua fonte.

questionAnswers(2)

yourAnswerToTheQuestion