PECS tamoyili nima va u Java'da qanday qo'llaniladi?
sobes.tech AI
AIdan javob
PECS (Producer Extends Consumer Super) prinsipi, Java genetiklarida wildcard tiplari bilan ishlashda extends va super kalit so'zlaridan qachon foydalanishni belgilovchi eslab qolish qoidasi hisoblanadi.
-
Producer (Ishlab chiqaruvchi): Agar siz generik parametrni ma'lumotlarni olish uchun (koleksiyadan elementlarni chiqarish) ishlatayotgan bo'lsangiz,
extendsbilan wildcarddan foydalaning. Koleksiya ma'lumot ishlab chiqaruvchi sifatida ishlaydi.? extends Ttipi "Tyoki uning subklassiga" teng bo'lgan har qanday turni anglatadi. Siz elementlarni xavfsiz tarzdaT(yoki uning superklassiga) sifatida o'qishingiz mumkin, lekin bunday kolleksiyaga elementlar qo'sha olmaysiz (null bundan mustasno). -
Consumer (Iste'molchi): Agar siz generik parametrni ma'lumotlarni qo'shish uchun (koleksiyaga elementlar qo'yish) ishlatayotgan bo'lsangiz,
superbilan wildcarddan foydalaning. Koleksiya ma'lumot iste'molchi sifatida ishlaydi.? super Ttipi "Tyoki uning superklassiga" teng bo'lgan har qanday turni anglatadi. SizTturidagi elementlarni (yoki uning subklasslarini) xavfsiz qo'shishingiz mumkin, lekin o'qishda ularniObjectsifatida olasiz.
Java'da qo'llanilishi:
Wildcard tiplari (?) bilan ishlatiladi, bu API'larning kolleksiyalar yoki boshqa generik tiplari bilan ishlashda moslashuvchanlikni oshiradi, ular kengroq tur doirasida ishlash imkonini beradi va tur xavfsizligini saqlab qoladi.
Misollar:
// Producer misoli
// printAll metodi List'dan o'qiydi
public void printAll(List<? extends Number> list) {
// Elementlarni Number (yoki Object) sifatida o'qish mumkin
for (Number num : list) {
System.out.println(num);
}
// Elementlar qo'sha olmaymiz (null bundan mustasno)
// list.add(123); // Kompilatsiya xatosi
}
// Consumer misoli
// addNumbers metodi List'ga elementlar qo'shadi
public void addNumbers(List<? super Integer> list) {
// Integer yoki uning subklasslarini qo'shish mumkin
list.add(1);
list.add(new Integer(2));
// list.add(new Double(3.0)); // Kompilatsiya xatosi
// O'qishda Object sifatida olamiz
Object o = list.get(0);
}