Kas ir wildcard Java?
sobes.tech AI
Atbilde no AI
Java zvaigznīte (?) tiek generiku kontekstā tiek izmantota, lai apzīmētu nezināmu tipu. Tā ļauj strādāt ar kolekcijām, kas satur dažādu saderīgu tipu elementus, bez stingras saistības ar konkrētu tipu.
Galvenie lietošanas scenāriji:
-
?(Augšējā ierobežotā zvaigznīte): Apzīmē jebkuru tipu, kas ir mantojošs vai realizē norādīto klasi/interfeisu. To izmanto, lasot datus no kolekcijas: Piemērs:List<? extends Number>var saturētList<Integer>,List<Double>,.getList<Long>.// Lasīšana no kolekcijas ar augšējo ierobežojumu public void processNumbers(List<? extends Number> numbers) { for (Number n : numbers) { System.out.println(n); } // numbers.add(new Integer(10)); // Kļūda kompilēšanā - nevar pievienot elementus } -
?(Zemākā ierobežotā zvaigznīte): Apzīmē jebkuru tipu, kas ir priekšgājējs norādītajai klasei/interfeisam vai pats šis tips. To izmanto datu rakstīšanai kolekcijā (PECS princips: Producer Extends, Consumer Super): Piemērs:List<? super Integer>var saturētList<Integer>,List<Number>,List<Object>.// Rakstīšana kolekcijā ar zemāko ierobežojumu public void addIntegers(List<? super Integer> list) { list.add(1); list.add(new Integer(2)); // Object o = list.get(0); // Atgriež Object, jo precīzs tips nav zināms } -
?(Neierobežota zvaigznīte): Apzīmē jebkuru tipu. Ekvivalentā ar? extends Object. To izmanto, kad nav svarīgs faktiskais elementu tips, piemēram, izmēra pārbaudei vai tīrīšanai:// Darbs ar jebkura tipa kolekciju public void printList(List<?> list) { for (Object obj : list) { System.out.println(obj); } // list.add("hello"); // Kļūda kompilēšanā - nevar pievienot elementus (izņemot null) }
Zvaigznīšu simboli palielina koda elastību, ļaujot metodēm strādāt ar plašāku kolekciju tipu diapazonu, vienlaikus saglabājot tipu drošību. Ar to palīdzību var izvairīties no koda dublēšanas metodēm, kas veic vienādas operācijas ar dažādām, bet saderīgām kolekciju tipiem.