Kezdőoldal » Számítástechnika » Programozás » Javaban mi a Wildcard szerepe?

Javaban mi a Wildcard szerepe?

Figyelt kérdés

public static <T extends Number> int keres(List<T> l) {

return l.indexOf(99);

}


public static int keres2(List<? extends Number> l) {

return l.indexOf(99);

}


T mint típusparaméter az okés, de a ? (wildcarddal) is ugyanolyan jó a program.

Nem látom értelmét, elvileg valahol valamilyen castolást kell végezni, de soha nem láttam rá jó példát.



2016. júl. 8. 16:34
 1/5 anonim ***** válasza:
100%

Akkor kell konkrétan kiírnod a típusparamétert, ha azt még valahol máshol is használni akarod.

public static <T extends Number> T asd(T input) {

.. return input;

}


Gondolj bele, ha lehagynád a T-t, akkor mit írnál a paraméterlistába és a visszatérési érték típusához?

2016. júl. 8. 16:38
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
100%

A T-s megoldásnál szerintem szépen látszik az előnye: mivel nevesítetted ("T"), felhasználhatod több helyen azt a típust. Pl.:


public static <T extends Number> int keres(List<T> miben, T mit) {

miben.indexOf(mit);

}


Ebben az esetben a 'mit' ugyanolyan típusú, mint amilyen típusú elemeket tárol a 'miben' lista.


A ?-el ezt nem tudod megtenni.

2016. júl. 8. 16:40
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

köszönöm a válaszokat, így már jobban érthető :D

De most felmerült bennem még egy kérdés ezzel kapcsolatban


List<Number> l = new ArrayList<>();

List<? extends Number> l2 = new ArrayList<>();


két list között van különbség?

2016. júl. 8. 16:49
 4/5 anonim ***** válasza:
Az egyetlen különbség a nevük.
2016. júl. 8. 17:39
Hasznos számodra ez a válasz?
 5/5 Piert ***** válasza:
Az utolsó kissé pontatlan. Mindkettő generikus paraméter, de míg a "T" itt egy konkrét típust jelöl ( és ezzel megvalósítja a típusbiztosságot ), addig a wildcardnál ez a megkötés nem létezik. A másik fontos tulajdonság a kiterjeszthetőség. A generikus paraméterekre csak upper bound ( "felső korlát?") megkötést tehetsz az exteds kulcsszóval, míg a wildcardokat lefelé is megkötheted a super kulcsszóval. Gyakorlati használatban amúgy valóban nagyon hasonlóak, ezért nem is javasolt a wildcardok használata, csak ha feltétlenül szükséges.
2016. júl. 10. 11:51
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!