Função genérica Java: como devolver o tipo genérico

Aqui está um padrão genérico de Java:

public <T> T getResultData(Class<T> resultClass, other_args) { 
   ...
   return resultClass.cast(T-thing);
}

Uma chamada típica se parece com:

   DoubleBuffer buffer;
   buffer = thing.getResultData(DoubleBuffer.class, args);

Eu nunca fui capaz de descobrir como usar esse padrão de forma limpa quando o tipo de retorno desejado é, em si, genérico. Para ser 'concreto', e se uma função como essa quiser retornarMap<String,String>? Desde que você não pode obter um objeto de classe para um genérico, é claro, a única opção seria passarMap.class, e então você precisa de um elenco e um@SuppressWarning depois de tudo.

Um acaba com uma chamada como:

Map<String, String> returnedMap;
returnedMap = thing.getResultData(Map.class, some_other_args);

Agora, voltamos a precisar de elencos e suprimir um aviso.

Eu suponho que alguém poderia pegar algo dojava.lang.reflect.Type família em vez doClass, mas esses não são especialmente fáceis de inventar. Isso parece:

class Dummy {
 Map<String, String> field;
}

...

Type typeObject = Dummy.class.getField("field").getGenericType();

Diante disso, a função chamada poderia extrair o tipo base e usá-la para lançar ou newInstance-ing, mas o negócio de campo fictício certamente parece feio.

Observe que funções como essa nem sempre estão chamandonewInstance. Obviamente, se eles fazem, eles não precisam ligarresultClass.cast.

questionAnswers(6)

yourAnswerToTheQuestion