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 — როდესაც გსურთ მონაცემების დაწერა.