Java'da wildcard nima?
sobes.tech AI
AIdan javob
Java'da ? joker simvolu, generiklarda noma'lum turni ifodalash uchun ishlatiladi. Bu turli mos keladigan tiplarga ega kolleksiyalar bilan ishlashga imkon beradi, aniq bir turga bog'liq bo'lmasdan.
Asosiy foydalanish holatlari:
-
?(Yuqori chegarali joker): Belgilangan sinf yoki interfeys meros olgan yoki uni amalga oshirgan har qanday turni anglatadi. Kolleksiyadan ma'lumot o'qish uchun ishlatiladi. Misol:List<? extends Number>List<Integer>,List<Double>ni o'z ichiga olishi mumkin,.getList<Long>.// Yuqori chegarali kolleksiyadan o'qish public void processNumbers(List<? extends Number> numbers) { for (Number n : numbers) { System.out.println(n); } // numbers.add(new Integer(10)); // Kompilatsiya xatosi - elementlar qo'shish mumkin emas } -
?(Pastki chegarali joker): Belgilangan sinf yoki interfeysning supertipi yoki o'zi. Kolleksiyaga yozish uchun ishlatiladi (PECS tamoyili: Producer Extends, Consumer Super). Misol:List<? super Integer>List<Integer>,List<Number>,List<Object>ni o'z ichiga olishi mumkin.// Pastki chegarali kolleksiyaga yozish public void addIntegers(List<? super Integer> list) { list.add(1); list.add(new Integer(2)); // Object o = list.get(0); // Object qaytaradi, aniq tur noma'lum } -
?(Chegarasiz joker): Har qanday turni anglatadi.? extends Objectga teng. Elementlarning haqiqiy turi muhim bo'lmagan hollarda, masalan, o'lchamni tekshirish yoki tozalash uchun ishlatiladi.// Har qanday turdagi kolleksiyaga ishlash public void printList(List<?> list) { for (Object obj : list) { System.out.println(obj); } // list.add("hello"); // Kompilatsiya xatosi - elementlar qo'shish mumkin emas (null bundan mustasno) }
Wildcards kodning moslashuvchanligini oshiradi, metodlarning kengroq kolleksiya tiplari bilan ishlashiga imkon beradi va tur xavfsizligini ta'minlaydi. Ular yordamida turli, ammo mos keladigan kolleksiya tiplari bo'yicha metodlar uchun kod takrorlanishini oldini olish mumkin.