Video: Java - Bounded Type Parameter 2024
Java ist eine großartige Möglichkeit zum Programmieren, aber manchmal müssen Sie kreativ werden. Zu diesem Zweck können Sie Platzhalter-Typ-Parameter verwenden. Angenommen, Sie haben eine Methode, die wie folgt deklariert ist:
public void addItems (Liste ArrayList)
{
// Textkörper nicht gezeigt
}
Gedankenfrage: Kompiliert die folgende Anweisung?
addItems (neue ArrayList ());
Antwort: Nein.
Das ist überraschend, denn
String
ist ein Subtyp von
Object
. Sie könnten also denken, dass ein Parameter, der besagt, dass er eine
ArrayList
von Objekten akzeptiert, eine
ArrayList
von Strings akzeptiert.
Unglücklicherweise funktioniert Vererbung nicht ganz so, wenn es um formale Typparameter geht. Stattdessen müssen Sie ein anderes Feature von Generics verwenden, das als Wildcards bezeichnet wird.
Kurz gesagt, wenn Sie eine Methode erstellen möchten, die einen beliebigen Typ von
ArrayList
akzeptiert, müssen Sie die Methode wie folgt codieren:
public void addItems (ArrayList-Liste)
In diesem Fall zeigt das Fragezeichen an, dass Sie hier beliebige Typen schreiben können.
Das ist fast so gut wie Vererbung, aber was ist, wenn Sie den Parameter tatsächlich auf Sammlungen einer bestimmten Superklasse beschränken wollen? Angenommen, Sie arbeiten an einem Abrechnungssystem, das eine
Employee
-Superklasse mit zwei Unterklassen mit dem Namen
HourlyEmployee
und
SalariedEmployee
hat und diese Methode akzeptieren soll. ein
ArrayList
von
Mitarbeiter
Objekte,
HourlyEmployee
Objekte oder
SalariedEmployee
Objekte?
In diesem Fall können Sie dem Platzhalter eine
extends
-Klausel hinzufügen:
public void addItems (ArrayList-Liste)
Dann können Sie den
addItems
-Methode mit einer
ArrayList
vom Typ
Employee
,
HourlyEmployee
oder
SalariedEmployee
.
Bevor Sie es einen Tag nennen, führen Sie dieses Beispiel noch einen Schritt weiter: Angenommen, diese
addItems
-Methode erscheint in einer generischen Klasse, die einen formalen Typparameter
verwendet, um den Typ der Elemente anzugeben. class akzeptiert, und Sie möchten, dass die
addItems
-Methode eine
ArrayList
vom Typ
E
oder eine ihrer Unterklassen akzeptiert. Zu diesem Zweck würden Sie die Methode
addItems
wie folgt deklarieren:
public void addItems (ArrayList-Liste)
Hier bedeutet der Platzhalterparameter
, dass die
ArrayList < kann vom Typ
E
für jeden Typ sein, der
E
erweitert.