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 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 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.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage