რა არის PECS პრინციპი და როგორ გამოიყენება Java-ში?
sobes.tech AI
პასუხი AI-სგან
PECS პრინციპი (Producer Extends Consumer Super) — ეს მემორანდუმია, რომელიც განსაზღვრავს, როდის უნდა გამოიყენოთ extends და super გასაღები სიტყვები Java გენიერიკების wildcard-ტიპებთან მუშაობისას:
-
Producer (პროდიუსერი): როდესაც იყენებთ გენიერიკ პარამეტრს მონაცემების მიღებისთვის (ელემენტების ამოღება კოლექციიდან), გამოიყენეთ wildcard-ით
extends. კოლექცია წარმოადგენს მონაცემების პროდიუსერს.? extends Tტიპი ნიშნავს "ნებისმიერ T-ის ან მისი ქვესაფრის". შეგიძლიათ უსაფრთხოდ წაიკითხოთ ელემენტები როგორცT(ან მისი ზედა კლასი), მაგრამ არ შეგიძლიათ დაამატოთ ელემენტები ამ კოლექციაში (გარდაnull)-ის გარდა. -
Consumer (კონზუმერი): როდესაც იყენებთ გენიერიკ პარამეტრს მონაცემების დამატებისთვის (ელემენტების ჩადება კოლექციაში), გამოიყენეთ wildcard-ით
super. კოლექცია წარმოადგენს მონაცემების კონზუმერს.? super Tტიპი ნიშნავს "ნებისმიერ T-ის ან მისი სუპერკლასს". შეგიძლიათ უსაფრთხოდ დაამატოთTტიპის ელემენტები (ან მისი ქვესაფრები), მაგრამ წაკითხვისას მიიღებთ მათ როგორცObject.
Java-ში გამოყენება:
მოძებნილია wildcard-ტიპებით (?) API-ს მოქნილობის გასაზრდელად, რომლებიც მუშაობენ კოლექციებთან ან სხვა გენიერიკ ტიპებთან, საშუალებას აძლევს მათ მუშაობას უფრო ფართო ტიპების დიაპაზონზე, ამავდროულად შენარჩუნებული ტიპის უსაფრთხოება.
მაგალითები:
// Producer-ის მაგალითი
// printAll მეთოდი კითხულობს List-დან
public void printAll(List<? extends Number> list) {
// შეგვიძლია ვკითხულობთ ელემენტებს როგორც Number (ან Object)
for (Number num : list) {
System.out.println(num);
}
// არ შეგვიძლია დავამატოთ ელემენტები (გარდა null-ის)
// list.add(123); // კომპილაციის შეცდომა
}
// Consumer-ის მაგალითი
// addNumbers მეთოდი აძლიერებს List-ს
public void addNumbers(List<? super Integer> list) {
// შეგვიძლია დავამატოთ Integer ან მისი ქვესაფრები
list.add(1);
list.add(new Integer(2));
// list.add(new Double(3.0)); // კომპილაციის შეცდომა
// წაკითხვისას მივიღებთ Object-ს
Object o = list.get(0);
}