Mi az a wildcard Java-ban?
sobes.tech MI
Válasz az MI-től
A ? helyettesítő karaktert a Java generikus típusokban használják ismeretlen típus reprezentálására. Lehetővé teszi, hogy különböző kompatibilis típusú elemeket tartalmazó gyűjteményekkel dolgozzunk anélkül, hogy szigorúan egy adott típushoz kötődnének.
Fő felhasználási forgatókönyvek:
-
?(Felső korlátos joker): Bármilyen olyan típusra utal, amely egy alosztály vagy az adott interfészt megvalósító típus. Adatok olvasására használják gyűjteményből. Példa:List<? extends Number>tartalmazhatList<Integer>,List<Double>típusokat,.getList<Long>.// Olvasás felső korláttal public void processNumbers(List<? extends Number> numbers) { for (Number n : numbers) { System.out.println(n); } // numbers.add(new Integer(10)); // Fordítási hiba - nem lehet elemeket hozzáadni } -
?(Alsó korlátos joker): Bármilyen olyan típusra utal, amely egy szuperosztálya vagy az adott osztálynak/interfésznek, vagy maga az osztály/interfész. Írásra használják gyűjteménybe (PECS elv: Producer Extends, Consumer Super). Példa:List<? super Integer>tartalmazhatList<Integer>,List<Number>,List<Object>típusokat.// Írás alsó korláttal public void addIntegers(List<? super Integer> list) { list.add(1); list.add(new Integer(2)); // Object o = list.get(0); // Object-et ad vissza, mivel a pontos típus ismeretlen } -
?(Korlátlan joker): Bármilyen típusra utal. Egyenértékű a? extends Object-tel. Akkor használják, amikor nem fontos a gyűjtemény elemeinek tényleges típusa, például méret ellenőrzésére vagy törlésére.// Bármilyen típusú gyűjteménnyel való munka public void printList(List<?> list) { for (Object obj : list) { System.out.println(obj); } // list.add("hello"); // Fordítási hiba - nem lehet elemeket hozzáadni (kivéve null) }
A wildcards növelik a kód rugalmasságát, lehetővé téve, hogy a metódusok szélesebb típusú gyűjteményekkel dolgozzanak, miközben megőrzik a típusbiztonságot. Segítségükkel elkerülhető a kód duplikálása olyan metódusok esetében, amelyek hasonló műveleteket végeznek különböző, de kompatibilis gyűjteménytípusokon.