Was ist ein Wildcard in Java?
sobes.tech KI
Antwort von AI
Java verwendet das Platzhalterzeichen (?) in Generics, um um unknown Typ darzustellen. Es ermöglicht die Arbeit mit Sammlungen, die Elemente verschiedener kompatibler Typen enthalten, ohne an einen bestimmten Typ gebunden zu sein.
Hauptszenarien:
-
?(Obergrenze Wildcard): Bezeichnet jeden Typ, der eine Unterklasse ist oder die angegebene Schnittstelle implementiert. Wird zum Lesen von Daten aus einer Sammlung verwendet. Beispiel:List<? extends Number>kannList<Integer>,List<Double>enthalten,.getList<Long>.// Lesen aus einer Sammlung mit Obergrenze public void processNumbers(List<? extends Number> numbers) { for (Number n : numbers) { System.out.println(n); } // numbers.add(new Integer(10)); // Kompilierungsfehler - Elemente können nicht hinzugefügt werden } -
? super(Untere Grenze Wildcard): Bezeichnet jeden Typ, der ein Supertyp der angegebenen Klasse/Schnittstelle ist oder diese Klasse/Schnittstelle selbst. Wird zum Schreiben in eine Sammlung verwendet (Prinzip PECS: Producer Extends, Consumer Super). Beispiel:List<? super Integer>kannList<Integer>,List<Number>,List<Object>enthalten.// Schreiben in eine Sammlung mit Untergrenze public void addIntegers(List<? super Integer> list) { list.add(1); list.add(new Integer(2)); // Object o = list.get(0); // Gibt Object zurück, da der genaue Typ unbekannt ist } -
?(Unbounded Wildcard): Bezeichnet jeden Typ. Entspricht? extends Object. Wird verwendet, wenn der genaue Typ der Elemente in der Sammlung egal ist, z.B. zum Überprüfen der Größe oder zum Leeren.// Arbeiten mit einer Sammlung beliebigen Typs public void printList(List<?> list) { for (Object obj : list) { System.out.println(obj); } // list.add("hello"); // Kompilierungsfehler - Elemente können nicht hinzugefügt werden (außer null) }
Wildcards erhöhen die Flexibilität des Codes, indem sie Methoden ermöglichen, mit einem breiteren Spektrum an Sammlungstypen zu arbeiten, während die Typsicherheit gewahrt bleibt. Damit lassen sich Code-Duplikate für Methoden vermeiden, die ähnliche Operationen an verschiedenen, aber kompatiblen Sammlungstypen ausführen.