In Java Generics werden Platzhalter verwendet, wenn Sie den genauen Typ nicht kennen. Sie ermöglichen es Ihnen, flexiblen und wiederverwendbaren Code zu schreiben. Der Platzhalter wird durch ein ? dargestellt. (Fragezeichen). Platzhalter werden hauptsächlich in Methodenparametern verwendet, um verschiedene generische Typen sicher zu akzeptieren.
Arten von Platzhaltern in Java
1. Platzhalter mit Obergrenze
Diese Platzhalter können verwendet werden, wenn Sie die Einschränkungen für eine Variable lockern möchten. Angenommen, Sie möchten eine Methode schreiben, die mit List funktioniert< Integer >Liste< Double >und Liste< Number >Sie können dies mit einem nach oben begrenzten Platzhalter tun.
Um einen Platzhalter mit Obergrenze zu deklarieren, verwenden Sie das Platzhalterzeichen („?“), gefolgt vom Schlüsselwort „extends“, gefolgt von der Obergrenze.
public static void add(List extends Number>Liste)
Primärschlüssel, zusammengesetzter Schlüssel
Durchführung:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Upper Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); System.out.println('Total sum is:' + sum(list1)); // Double list List<Double> list2 = Arrays.asList(4.1 5.1 6.1); System.out.print('Total sum is:' + sum(list2)); } private static double sum(List extends Number> list) { double sum = 0.0; for (Number i : list) { sum += i.doubleValue(); } return sum; } }
Ausgabe
Total sum is:22.0 Total sum is:15.299999999999999
Erläuterung: Im obigen Programm enthält Liste1 ganzzahlige Werte und Liste2 doppelte Werte. Beide werden an die Summenmethode übergeben, die einen Platzhalter verwendet extends Number>. Dies bedeutet, dass jede Liste eines Typs akzeptiert werden kann, der eine Unterklasse von Number ist, z. B. Integer oder Double.
2. Platzhalter mit niedrigerer Grenze
Es wird durch das Platzhalterzeichen ('?') ausgedrückt, gefolgt vom Schlüsselwort super, gefolgt von seiner Untergrenze: super A>.
rdbms-Normalisierung
Syntax: Sammlungstyp super A>
Durchführung:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Lower Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list1); // Number list List<Number> list2 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list2); } public static void printOnlyIntegerClassorSuperClass( List super Integer> list) { System.out.println(list); } }
Ausgabe
[4 5 6 7] [4 5 6 7]
Erläuterung: Hier akzeptiert die Methode printOnlyIntegerClassorSuperClass nur Integer oder seine Superklassen (wie Number). Wenn Sie versuchen, eine Liste von Double zu übergeben, kommt es zu einem Fehler bei der Kompilierung, da Double keine Superklasse von Integer ist.
Notiz: Verwenden Sie den erweiterten Platzhalter, wenn Sie Werte aus einer Struktur abrufen möchten, und den Super-Platzhalter, wenn Sie Werte in eine Struktur einfügen möchten. Verwenden Sie keine Platzhalter, wenn Sie Werte in einer Struktur abrufen und einfügen. Sie können eine Obergrenze für einen Platzhalter oder eine Untergrenze angeben, aber Sie können nicht beides angeben.
3. Unbegrenzter Platzhalter
Dieser Platzhaltertyp wird mit dem Platzhalterzeichen (?) angegeben, zum Beispiel Liste. Dies wird als Liste unbekannter Typen bezeichnet. Diese sind in den folgenden Fällen nützlich:
Java-Methode
- Beim Schreiben einer Methode, die mithilfe der in der Object-Klasse bereitgestellten Funktionalität verwendet werden kann.
- Wenn der Code Methoden in der generischen Klasse verwendet, hängt dies nicht vom Typparameter ab
Durchführung:
Javaimport java.util.Arrays; import java.util.List; class unboundedwildcardemo { public static void main(String[] args) { // Integer List List<Integer> list1 = Arrays.asList(1 2 3); // Double list List<Double> list2 = Arrays.asList(1.1 2.2 3.3); printlist(list1); printlist(list2); } private static void printlist(List> list) { System.out.println(list); } }
Ausgabe
[1 2 3] [1.1 2.2 3.3]