Hirdetés
- Bemutatkozott a HHKB legújabb, Topre kapcsolókkal szerelt billentyűzete
- Intel Raptor Lake-U Refresh architektúrás mini PC érkezett az MSI színeiben
- A Chrome egyeduralmára tör a ChatGPT böngészője
- Kompakt AIO-val használható rackmount ház jött a Chieftec fémjelzésével
- Már nagyon közel van az AI szerverekbe szánt SOCAMM2 szabvány véglegesítése
- Kormányok / autós szimulátorok topikja
- Hobby elektronika
- Micro Four Thirds
- Vezeték nélküli fejhallgatók
- Intel Core Ultra 3, Core Ultra 5, Ultra 7, Ultra 9 "Arrow Lake" LGA 1851
- BIOS topic
- Külső merevlemezek - USB, eSATA, FireWire HDD
- Azonnali alaplapos kérdések órája
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- Milyen TV-t vegyek?
Új hozzászólás Aktív témák
-
Szmeby
tag
válasz
#74220800 #9101 üzenetére
Nem egészen.
Van 2 PolyLine objektumod, amit a Bsp10-ben hozol létre polyLine és polyLine2 néven.
Fogod a polyLine nevűt, és ráhívsz az equals metódusára, paraméterként pedig átadod ugye a polyLine2-t.A történések ezután az equals-on belül zajlanak tovább. A korábban polyLine-nak nevezett objektumot az equals-ban a this kulcsszóval érheted el (amit többnyire nem kötelező kiírni, névütközés esetén viszont kénytelen az ember... na mindegy), míg a polyLine2 most már obj néven érhető el. A csavar ott van, hogy az equals szignatúrája csak Object típusú paramétert enged meg, ezért az obj paramétert kénytelen vagy Object típussal definiálni, erről viszont a java már nem tudja, hogy az valójában egy PolyLine objektum, így a spéci metódusaira sem tud ráhívni, és a field-jeit sem látja.
Úgyhogy castolunk, megmondjuk őnagyságának, hogy ez bizony egy PolyLine:
PolyLine other = (PolyLine) obj;
Megjegyzem, most ez így működik, de ha megpróbálsz egy nem PolyLine objektumot betolni, szétszakad az egész, tehát érdemes az equals-ban előbb megbizonyosodni arról, hogy valóban PolyLine-e (getClass() metódus felhívásával, instanceof-fal).Ezekután az other változóról már tudjauk, hogy PolyLine, elérjük minden metódusát és field-jét, például a hasában lévő points listát is. Egy Object esetén ezt nem tudod megtenni. És ezt a listát össze tudjuk hasonlítani a this objektumunk points listájával.
return this.points.equals(other.points);
Rövidebben:return points.equals(other.points);
Tehát listát hasonlítunk listával, ezért működik.
Ez nem castolás, csak meghivatkozzuk az objektum egy field-jét.
Castolásnál a változónév elé zárójelben megadjuk azt a típust, amire castolni akarunk, és ezzel aztán azt kezdünk, amit akarunk. Az "other.points" nem tartalmaz semmilyen zárójelet meg típust, ez csak ráhív a points nevű mezőre az other objektumban.A castolás elhiteti a jvm-mel, hogy az adott objektum valójában egy másik típusú objektum. Itt nem változtatunk a típuson, a this és az other továbbra is PolyLine típusú, és mindkettő hasában van 1-1 lista (points néven), amit felhasználunk az egyezőség megállapításához. A points.equals() tehát az ArrayList-en található equals metódus.
Ha a this-t és az other-t hasonlítanád itt össze egymással, az ugyanabba az equals metódusba hívna bele (rekurzió) újra és újra, amiben eleve vagy, és addig pörögne, amíg el nem fogy a stack, majd lehal az egész. Próbáld ki.
És kérdezz bátran.
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Xbox Series X|S
- sziku69: Fűzzük össze a szavakat :)
- A fociról könnyedén, egy baráti társaságban
- Luck Dragon: Asszociációs játék. :)
- One otthoni szolgáltatások (TV, internet, telefon)
- Gentoo Linux
- Windows Insider Program
- Futás, futópályák
- Linux kezdőknek
- Kormányok / autós szimulátorok topikja
- További aktív témák...
- Asus ROG FLOW X13 x360 Érintős MINI Gamer laptop -50% Ryzen 9 6900HS 16GB/1TB RTX 3050Ti 4GB FHD+
- DJI FPV Fly More Combo drón szett - CARBON
- Eladó RedMagic 9 pro (16/512 GB)
- Gamer PC - R7 5800X, RTX 3070 és 16gb RAM + GARANCIA
- Samsung Galaxy S25 / FE / 25 Ultra / S25 Edge / Flip 7 - 256GB / 512GB - Bontatlan - 2/3 év gari
- Bomba ár! Lenovo ThinkPad T460P - i7-6820HQ I 8GB I 256SSD I Nvidia I 14" FHD I Cam I W11 I Gari!
- Samsung Galaxy A33 5G 128GB, Kártyafüggetlen, 1 Év Garanciával
- Microsoft Surface Pro 9 i5-1245U 16GB 1000GB 1 év garancia
- ÁRGARANCIA! Épített KomPhone Ultra 9 285K 64GB RAM RTX 5090 32GB GAMER PC termékbeszámítással
- Gamer PC-Számítógép! Csere-Beszámítás! I7 12700E / RTX 3060Ti / 32GB DDR4 / 512GB Nvme SSD
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: Laptopműhely Bt.
Város: Budapest