Sobes.tech
Junior — Middle

Ինչ է տարբերությունը 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 — երբ անհրաժեշտ է գրել տվյալներ։