Generische Java-Funktion: Rückgabe des generischen Typs

Hier ist ein generisches Java-Muster:

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

Ein typischer Anruf sieht folgendermaßen aus:

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

Ich habe nie herausgefunden, wie dieses Muster sauber verwendet werden kann, wenn der gewünschte Rückgabetyp selbst generisch ist. Konkret gesagt, was ist, wenn eine Funktion wie diese zurückkehren möchte?Map<String,String>? Da Sie für ein generisches Objekt natürlich kein Klassenobjekt erhalten können, wäre die einzige Option, zu übergebenMap.classund dann brauchst du eine Besetzung und eine@SuppressWarning&nbsp;Letztendlich.

Man endet mit einem Anruf wie:

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

Jetzt braucht man wieder Würfe und unterdrückt eine Warnung.

Ich nehme an, man könnte dem etwas abnehmenjava.lang.reflect.Type&nbsp;Familie statt derClass, aber diese sind nicht besonders einfach zu konstruieren. Das sieht aus wie:

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

...

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

In Anbetracht dessen könnte die aufgerufene Funktion den Basistyp extrahieren und diesen zum Casting oder NewInstance-ing verwenden, aber das Dummy-Feldgeschäft sieht sicher hässlich aus.

Beachten Sie, dass Funktionen wie diese nicht immer aufgerufen werdennewInstance. Wenn doch, müssen sie natürlich nicht anrufenresultClass.cast.