Hirdetés
- Készen áll a tömeggyártásra az SK Hynix LPDDR6-os memóriája
- Monitorok tucatjait hitelesíti az új GeForce driver
- AI-ra hangolta legújabb NUC mini PC-jét az ASUS
- Befutott a régóta várt, sok P-maggal kitömött, LGA1700-as Core sorozat
- Azt hittük, a GeForce RTX 3060 már leköszönt, de úgy látszik, hogy mégsem!
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- VR topik
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- TCL LCD és LED TV-k
- Milyen belső merevlemezt vegyek?
- Azt hittük, a GeForce RTX 3060 már leköszönt, de úgy látszik, hogy mégsem!
- Ilyen olcsó sem volt még egy Apple notebook
- Mégis meglepi egy új GeForce-szal a rajongókat az NVIDIA?
- Vezeték nélküli fülhallgatók
- OLED monitor topic
Új hozzászólás Aktív témák
-
Aethelstone
addikt
válasz
geckowize
#6921
üzenetére
Vagy ilyet is lehet, ha már a generikusokra rákérdeztél. Ez viszont működik explicit típusokkal is.
(Természetesen a korábban vázolt megoldások tejesen jók)
public class GenericTest<T extends Comparable<T>> {
public T max(T a, T b) {
return (a.compareTo(b) > 0 ? a : b);
}
public static void main(String[] args) {
GenericTest<Double> gt1 = new GenericTest<Double>();
System.out.println(gt1.max(10d, 12d));
GenericTest<Integer> gt2 = new GenericTest<Integer>();
System.out.println(gt2.max(12, 23));
// És így tovább....
}
}Ennek a megoldásnak az az előnye, hogy tulajdonképpen mindenféle típusra lehet max() metódust írni. Kivéve természetesen a primitív típusokat, azokat a generikusok nem támogatják

-
Szmeby
tag
válasz
geckowize
#6923
üzenetére
Na igen. Ha kényszeríted, nem adja meg magát.

Bezzeg így:
byte x = 3;
byte y = 5;
byte a = (byte) maxObject.max(x,y);
System.out.println(a);Az oké, hogy a paraméterek mind elférnek a double által lefoglalt területen, viszont így kénytelen vagy double típust visszaadni. A double értéket viszont csak double típusú változóba tudsz beletölteni hiánytalanul.
Ha lefelé castolod (pl. byte-ra), akkor információ veszhet el.
Egy nagy vödörből nem tudod az összes vizet áttölteni egy kis vödörbe. Viszont ha a nagy vödörben eleve kevés víz van, és ezt tudod is, akkor az áttöltés veszteség nélkül megoldható. Bocs a hülye metaforáért.
Bár gányolásnak tartom, de ennél a példánál (két szám maximumát adja vissza) nincs túl nagy veszély. A programozó józanságára van bízva, hogy ha byte-okat ad be, akkor byte-ot biztonságosan visszakaphat. Ha az egyik int lenne, de az érték nem változna, még az is oké. Viszont ha az int értéke pl. 300, akkor gáz van, mert az nem fér bele a byte-ba.
De még 2 byte paraméternél is lehet gond, ha nem maximumot ad vissza a metódus, hanem az összegüket. Bár ez double esetén is gond, ha elegendően nagy számokkal dolgozol.
Amúgy azért nem szeretem ezt, mert figyelmetlenségből is könnyű rontani, ami egy nagy alkalmazásnál aranyos bugokat szül. -
-
geckowize
őstag
válasz
geckowize
#6867
üzenetére
Sziasztok,
újabb feladathoz értem, ahol elakadtam.
Az alábbi Comapre osztályban minden max metódus azonos, kivéve a típusok neveit. LEhetséges lenne egyetlen max metódussal valamennyit helyettesíteni? Ha igen, akkor melyik megoldást használná?
public class Compare {
public byte max(final byte a, final byte b) {
return a > b ? a : b;
}
public short max(final short a, final short b) {
return a > b ? a : b;
}
public int max(final int a, final int b) {
return a > b ? a : b;
}
public long max(final long a, final long b) {
return a > b ? a : b;
}
public float max(final float a, final float b) {
return a > b ? a : b;
}
public double max(final double a, final double b) {
return a > b ? a : b;
}
public char max(final char a, final char b) {
return a > b ? a : b;
}
}Mire gondolhat, ha a könyvben még nem taglalta a generalizáció fogalmát, a generikus függvényeket? Egyelőre amik voltak: Procedurális nyelvi elemek, OO nyelvi elemek (osztályok, öröklés, beágyazott osztályok).
-
cacattila
csendes tag
válasz
geckowize
#6869
üzenetére
Ez esetben egy rendkívül ronda trükkel bár elérheted amit akarsz,viszont ez nem megbízható, ugyanis a GC-re hagyatkozol, arra meg nem nagyon vagy befolyással, és őszintén kétlem, hogy a feladatban ilyet kérnének, tekintve a körítést. Lényeg a lényeg, ha felülírod a finalize() metódust, akkor amikor a GC megszünteti az objektumot, akkor ez a fv 1x meghívódik. Ismétlem, nem tartom valószínűnek hogy ez a feladat célja,ugyanis erre nem lehet építkezni, mivel ilyenkor a számláló csökkentésének időzítése nem determinisztikus a program szempontjából. Gyanítom egy destruktorral rendelkező programnyelvhez való példát próbál a tanár Java-ra erőltetni, ez így kicsit veszélyes dolog.
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Elektromos autók - motorok
- Eredeti játékok OFF topik
- Okosóra és okoskiegészítő topik
- Kerékpárosok, bringások ide!
- Multimédiás / PC-s hangfalszettek (2.0, 2.1, 5.1)
- Autós topik
- Samsung Galaxy Felhasználók OFF topicja
- OpenMediaVault
- Okos Otthon / Smart Home
- Milyen légkondit a lakásba?
- További aktív témák...
- BESZÁMÍTÁS! AM4 Félkonfig/Teljes konfig
- Nespresso Delonghi tejhabosítós kávéfőző - Bontatlan, 2 év garancia - Eredeti ára 125e!
- Asus TUF GAMING A620M-PLUS alaplap eladó
- X1 Carbon Gen12 14" FHD+ IPS Ultra 7 165U 32GB 512GB NVMe magyar vbill ujjolv IR kam gar
- Apple MacBook Pro Retina 16" M5 Pro 18CPU / 20C GPU / 24GB / 1TB - 1 Év Apple Garancia
- BESZÁMÍTÁS! ASUS B560M i5 11400 64GB DDR4 512GB SSD RTX 3070 8GB ZALMAN S2 TG CHIEFTEC 750W
- Apple iPhone 15 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- RÉSZLETFIZETÉS.BANKMENTES.KAMATMENTES. Arena Racer szövet gamer szék
- Újszerű Dell XPS 13 9310 - 13.4" FHD+ i7-1185G7 - 16GB - 1TB - Win11 PRO
- SzoftverPremium.hu
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest



