unterschied generische typen und supertypen als methodenparameter

continue

Aktives Mitglied
Hallo ich hätte mal eine Kurze Frage:

Angenommen ich habe zwei klassen Subclass1 und Subclass2 welche die Klasse Superclass extenden.

was ist nun der unterschied zwischen folgenden zwei methodendeklarationen:

Java:
public void myMethod(Superclass s);

und

Java:
public <T extends Superclass> void myMethod(T s);

Ich weiß dass die zweite mit Generizität zu tun hat, ja. Aber verhalten sich die zwei methoden gleich oder gibt es hier unterschiede?

lg
 
bei dieser einen Methode mit nur einem Parameter-Objekt ohne Rückgabe oder Möglichkeit neue Objekte zu erzeugen gibt es wohl keinen Unterschied,

was anderes wäre z.B.
public void myMethod(List<Superclass> s);
vs.
public <T extends Superclass> void myMethod(List<T> s);

in die erste Liste könnte man beliebige (neue) Superclass-Objekte einfügen, in die andere Liste nur T-Objekte,
(hier höchstens ein paar der Elemente die sowieso schon drin sind erneut einfügen, andere T-Objekte sind nicht verfügbar)

----

spannender sind generische Parameter an ganzen Klassen mit verschiedenen Methoden
 
Nehmen wir mal Number als Beispiel, und geben ein Resultat des gleichen Typs zurück:

Java:
public Number myMethod(Number s);

und

Java:
public <T extends Number> T myMethod(T s);

Im ersten Fall kannst du nur Number zurückgeben. Im zweiten Fall kannst du eine Methode schreiben, die garantiert den Typ "beibehält", also aus einem Integer wieder einen Integer macht, aus Double einen Double u.s.w. In diesem Sinne ist die zweite Definion "präziser".
 

Zurück
Oben