Methodendeklaration verstehen

benjamin222

Mitglied
[CODE lang="java" title="public static List asList(T... a) { return new ArrayList<>(a); }"]public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}[/CODE]

Bin auf diesen Code Schnipsel in der Klasse Arrays gestoßen. Und ich verstehe gleich zwei Sachen nicht.

1. Warum da zwei Rückgabetypen stehen und
2. was diese Punktschreibweise bei den Eingangsparametern zu bedeuten hat.
 
Würde man die Angabe <T> nach dem static weglassen, müsste T ein existierender Typ sein, also z. B. eine Klasse T existieren. Mit der Angabe drückt man aus, dass dem nicht so ist, sondern T ein Typparameter ist, also für einen beliebigen Typ steht.

Der Compiler kann aus dem Methodenaufruf den Typ ableiten: wird asList mit String-Objekten aufgerufen, dann steht T eben für String und der Rückgabewert ist vom Typ List<String>. Wird asList dagegen mit Person-Objekten aufgerufen, dann steht T für Person und der Rückgabewert ist vom Typ List<Person>.

Die Ellipse (...) bedeutet, dass eine beliebige Zahl von Argumenten des Typs T übergeben werden können. Der Parameter a ist in der Methode dann ein Array vom Typ T, das alle Argumente enthält.
 
Um das evtl. noch Nachlesen zu können:
Das Erste ist der Punkt Generics und es handelt sich um eine generische Methode.

Das Zweite wird als varargs bezeichnet. Eine Variable Anzahl Argumente.

Mit den Begriffen kann man dann auch noch zusätzliche Dokumentation finden.
 

Neue Themen


Zurück
Oben