Polymorphie generischer Rückgabe-Typ

Sergeant_Pepper

Bekanntes Mitglied
Hallo,

ich habe eine Methode mit generischen Parametern. Ich möchte, dass der Rückgabewert (neues Objekt) den gleichen Typ hat wie p1.

Was haltet ihr von dieser Lösung:
Java:
public static <T extends MeinInterface> T berechneWert(MeinInterface p1, MeinInterface p2, MeinInterface p3)
    throws IllegalArgumentException, SecurityException, NoSuchMethodException,
     InstantiationException, IllegalAccessException, InvocationTargetException
{
    double wert1;
    double wert2;
    // Berechnung der Werte

    Class<T> type = (Class<T>) p1.getClass();
    Constructor<T> constructor = type.getConstructor(double.class, double.class);
    return (T) constructor.newInstance(wert1, wert2);
}

Gibt es etwas einfacheres oder besseres? Abgesehen von den vielen Exceptions, die man bündeln könnte...
 
Dann gib
Code:
p1
doch denselben Typ:
Java:
public static <T extends MeinInterface> T berechneWert(T p1, MeinInterface p2, MeinInterface p3)
 
OK, danke, das verkürzt die Signatur etwas:
Java:
public static <T extends MeinInterface> T berechneWert(T p1, T p2, T p3)

Aber was ist mit dem Anlegen des neuen, generischen Rückgabe-Objekts? (Zeile 9 bis 11 im 1. Beitrag)
 
auf die meisten Ts in den Zeilen kannst du verzichten, einen Generics-Anstrich hat Reflection eigentlich nie verdient,

Bewertung:
du erzeugst ein neues Objekt der übergebenen Klasse, in Java 1.4 auch nicht anders zu programmieren,

die ganze Methode ist nicht besonders generisch, aber hinter Generics steckt eh oft nicht viel,
also ist das hier lediglich vorhandene Casten auf den richtigen Rückgabetyp schon passend benannt..


per Reflection neue Objekte sind nie gut,
etwas besser wäre, wenn p1 per Methode ein passendes Objekt erzeugen würde, aber auch kein einfacher Standard,
schafft nur viele Methoden in vielen Klassen falls das Interface verbreitet ist,
da haben 3 Reflection-Zeilen auf einmal auch wieder was
 

Neue Themen


Zurück
Oben