Mis on wildcard Java's?
sobes.tech AI
Vastus AI-lt
Java-s ? wildcards kasutatakse üldistes (generics) kontekstis teadmata tüübi tähistamiseks. See võimaldab töötada kogumitega, mis sisaldavad erinevate sobivate tüüpide elemente, ilma rangelt konkreetsele tüübile allutamata.
Peamised kasutusstsenaariumid:
-
?(Ülemine piiratud wild card): Näitab mis tahes tüüpi, mis pärib või rakendab määratud klassi/liidest. Kasutatakse andmete lugemiseks kogumist: Näide:List<? extends Number>võib sisaldadaList<Integer>,List<Double>,.getList<Long>.// Lugemine kogumist ülemise piiranguga public void processNumbers(List<? extends Number> numbers) { for (Number n : numbers) { System.out.println(n); } // numbers.add(new Integer(10)); // Korrigeerimisel viga - elemente ei saa lisada } -
?(Alumine piiratud wild card): Näitab mis tahes tüüpi, mis on määratud klassi/liidese eelkäija või ise see klass/liides. Kasutatakse andmete kirjutamiseks kogumisse (PECS põhimõte: Producer Extends, Consumer Super): Näide:List<? super Integer>võib sisaldadaList<Integer>,List<Number>,List<Object>.// Kirjutamine kogumisse alumise piiranguga public void addIntegers(List<? super Integer> list) { list.add(1); list.add(new Integer(2)); // Object o = list.get(0); // Tagastab Object, kuna täpne tüüp teadmata } -
?(Piiramatu wild card): Näitab mis tahes tüüpi. Ekvivalentne? extends Object. Kasutatakse, kui elementide tegelik tüüp ei ole oluline, näiteks suuruse kontrollimiseks või puhastamiseks:// Töötamine mis tahes tüüpi kogumiga public void printList(List<?> list) { for (Object obj : list) { System.out.println(obj); } // list.add("hello"); // Korrigeerimisel viga - elemente ei saa lisada (välja arvatud null) }
Zigzag-märgid suurendavad koodi paindlikkust, võimaldades meetoditel töötada laiemate kogumitüüpide spektriga, säilitades samal ajal tüübi turvalisuse. Nende abil saab vältida koodide dubleerimist, mis teevad samu operatsioone erinevate, kuid sarnaste tüüpidega kogumite puhul.