Javaban generikus metódus írásánál miért kell a metódust is paraméterezni?
Például:
public static <E> void replace(List<E> s, E val, E newVal) {
for (ListIterator<E> i = s.listIterator(); i.hasNext();) {
if (val == null ? i.next() == null : val.equals(i.next())) {
i.set(newVal);
}
}
}
void előtt mit keres <E> típusparaméter?
1. Ezzel jelzed, hogy generikus metódust írsz.
2. Itt tehetsz megszorításokat a típus[ok]ra.
tényleg ez így jól hangzik,
ha szeretnék csak Integer és Double típusra szűkíteni, akkor azt hogy tehetem meg?
Ezt így nem tudod megtenni:
Viszont olyat csinálhatsz, hogy <T extends Number> és akkor szám típusokra fog működni a metódus.
Ahogy az előző is írta, a Numberre tudsz megkötést tenni. Ez azért van így, mert ilyenkor egy osztályt (interfészt) határozol meg, ami esetedben közös őse a Double és Integer osztályodnak. De ugyanakkor ez elfogad minden olyan osztályt is, amely a hierarchiában a Number alatt szerepel és van oda egyértelmű út ( magyarul leszármazottja).
Ha nagyon lényeges, hogy csak a megjelölt típusokat fogadja el, akkor a függvény törzsében a getClass függvénnyel ellenőrizheted a dinamikus típust ( de ez ebben a kontextusban nem egy szép megoldás).
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!