Junior — Middle
Čím sa líšia kľúčové slová extends a super pri používaní generík v Jave?
sobes.tech AI
Odpoveď od AI
V Jave, pri práci s generikmi sa ključnimi besedami extends in super omejujemo tipe in vplivajo na kovariantnost in kontravariantnost.
-
? extends T— zgornja omejitev (kovariantnost). Omogoča uporabo tipa T ali katerega koli njegovega podrazreda. To pomeni, da lahko beremo objekte tipa T iz zbirke, vendar ne moremo varno dodajati objektov v takšno zbirko (razennull). -
? super T— spodnja omejitev (kontravariantnost). Omogoča uporabo tipa T ali katerega koli njegovega nadrazreda. To pomeni, da lahko dodajamo objekte tipa T v zbirko, pri branju pa lahko dobimo le objekte tipa Object ali bolj splošnega tipa.
Primer:
List<? extends Number> listExtends = new ArrayList<Integer>();
Number num = listExtends.get(0); // Lahko beremo kot Number
// listExtends.add(10); // Napaka pri prevajanju
List<? super Integer> listSuper = new ArrayList<Number>();
listSuper.add(10); // Lahko dodamo Integer
Object obj = listSuper.get(0); // Pri branju je tip Object
Torej, extends se uporablja, ko želimo brati podatke iz strukture, super pa, ko želimo zapisovati podatke.