Sobes.tech
Junior — Middle

Java-ში გენერიკების გამოყენებისას, რა განსხვავებაა extends და super საკვანძო სიტყვებს შორის?

sobes.tech AI

პასუხი AI-სგან

Java- ში, როდესაც მუშაობთ გენერიკებთან, საკვანძო სიტყვები extends და super გამოიყენება ტიპების შეზღუდვისთვის და გავლენას ახდენს კოვარიანტობასა და კონტრამარიანტობაზე.

  • ? extends T — ზედა საზღვარი (კოვარიანტობა). საშუალებას აძლევს გამოიყენოს T ტიპი ან მისი ნებისმიერი ქვესკლასი. ეს ნიშნავს, რომ შეგიძლიათ წაიკითხოთ T ტიპის ობიექტები კოლექციიდან, მაგრამ უსაფრთხოდ არ შეგიძლიათ დაამატოთ ობიექტები ამ კოლექციაში (გარდა null-ის).

  • ? super T — ქვედა საზღვარი (კონტრავარიანტობა). საშუალებას აძლევს გამოიყენოს T ტიპი ან მისი ნებისმიერი ზედა კლასი. ეს ნიშნავს, რომ შეგიძლიათ დაამატოთ T ტიპის ობიექტები კოლექციაში, მაგრამ წაკითხვისას შეგიძლიათ მიიღოთ მხოლოდ Object ან უფრო ზოგადი ტიპის ობიექტები.

მაგალითი:

List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // შეიძლება წაიკითხოთ როგორც Number
// listExtends.add(10); // კომპილაციის შეცდომა

List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // შეიძლება დაამატოთ Integer
Object obj = listSuper.get(0); // წაკითხვისას, ტიპი Object

ამიტომ, extends გამოიყენება, როდესაც გსურთ მონაცემების წაკითხვა სტრუქტურიდან, ხოლო super — როდესაც გსურთ მონაცემების დაწერა.