Ce este un wildcard în Java?
sobes.tech AI
Răspuns de la AI
Caracterul joker (?) în Java este utilizat în generice pentru a reprezenta un tip necunoscut. Permite lucrul cu colecții care conțin elemente de tipuri compatibile diferite, fără a fi strict legat de un anumit tip.
Scenariile principale de utilizare:
-
?(Wildcards cu limită superioară): Indică orice tip care este un subtip sau implementează interfața specificată. Este folosit pentru citirea datelor dintr-o colecție. Exemplu:List<? extends Number>poate conțineList<Integer>,List<Double>,.getList<Long>.// Citirea dintr-o colecție cu limită superioară public void processNumbers(List<? extends Number> numbers) { for (Number n : numbers) { System.out.println(n); } // numbers.add(new Integer(10)); // Eroare de compilare - nu se pot adăuga elemente } -
?(Wildcards cu limită inferioară): Indică orice tip care este un supertip al clasei/interfeței specificate sau chiar această clasă/interfață. Este folosit pentru scrierea în colecție (principiul PECS: Producer Extends, Consumer Super). Exemplu:List<? super Integer>poate conțineList<Integer>,List<Number>,List<Object>.// Scriere în colecție cu limită inferioară public void addIntegers(List<? super Integer> list) { list.add(1); list.add(new Integer(2)); // Object o = list.get(0); // Returnează Object, deoarece tipul exact este necunoscut } -
?(Wildcards fără limită): Indică orice tip. Echivalent cu? extends Object. Este folosit când nu contează tipul exact al elementelor colecției, de exemplu, pentru verificarea dimensiunii sau pentru golire.// Lucru cu colecție de orice tip public void printList(List<?> list) { for (Object obj : list) { System.out.println(obj); } // list.add("hello"); // Eroare de compilare - nu se pot adăuga elemente (cu excepția null) }
Wildcards sporesc flexibilitatea codului, permițând metodelor să lucreze cu o gamă mai largă de tipuri de colecții, menținând în același timp siguranța tipurilor. Cu ajutorul lor, se poate evita duplicarea codului pentru metodele care efectuează operații similare pe colecții de tipuri diferite, dar compatibile.