Ogólna funkcja Java: jak zwrócić typ ogólny

Oto ogólny wzór Java:

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

Typowe połączenie wygląda:

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

Nigdy nie byłem w stanie dowiedzieć się, jak używać tego wzorca czysto, gdy pożądany typ powrotu jest sam w sobie ogólny. Aby być „konkretnym”, co, jeśli taka funkcja chce powrócićMap<String,String>? Ponieważ nie można uzyskać obiektu klasy dla ogólnego, oczywiście jedyną opcją byłoby przekazanieMap.class, a następnie potrzebujesz obsady i@SuppressWarning po wszystkim.

Jeden kończy się rozmową typu:

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

Teraz jeden powraca do potrzeby rzucania i tłumienia ostrzeżenia.

Przypuszczam, że można wziąć coś zjava.lang.reflect.Type rodzina zamiastClass, ale te nie są szczególnie łatwe do wymyślenia. To wygląda jak:

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

...

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

Biorąc to pod uwagę, wywołana funkcja mogłaby wyodrębnić typ bazowy i użyć go do odlewania lub nowego Instancji, ale biznes pola fikcyjnego z pewnością wygląda brzydko.

Zauważ, że takie funkcje nie zawsze wywołująnewInstance. Oczywiście, jeśli tak, nie muszą dzwonićresultClass.cast.

questionAnswers(6)

yourAnswerToTheQuestion