Ինչ է տարբերությունը extends և super բանալի բառերի օգտագործման ժամանակ Java-ում?
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 — երբ անհրաժեշտ է գրել տվյալներ։