Hirdetés
- Brogyi: CTEK akkumulátor töltő és másolatai
- Magga: PLEX: multimédia az egész lakásban
- <Lacy85>: Időmilliomosok előnyben - Játékfejlesztés #1
- Luck Dragon: Asszociációs játék. :)
- sziku69: Fűzzük össze a szavakat :)
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- lezso6: Miért is jó, ha dohányzol?! Megéri rászokni!
- Geri Bátyó: Agglegénykonyha 7 – Még egy megosztó – de gyors – étel: resztelt máj
- urandom0: Aki használ/használt Giten kívűl más verziókezelőt, mesélne róla?
- sziku69: Szólánc.
Új hozzászólás Aktív témák
-
Szmeby
tag
válasz
#74220800 #9096 üzenetére
Ezért ne kövesd el te azt a hibát, amit a java megalkotói, hogy túl általános típust használsz.
Jó, tudom, csak kompatibilitás, de akkoris.Szóval a probléma a PolyLine.equals-ban van. Mivel a szignatúrája szerint Objectet vár, az ember bármit beadhat. És hidd el, be is fog. Amin aztán az egész cucc megfekszik (pl. ClassCastException-nel), ha nem figyelsz. Rosszabb esetben - mint most is - működik tovább hibásan.
Javaslom, minden equals metódusodban ellenőrizni a bejövő paraméter típusát. Ha nem jó típus, akkor false, ha jó típus, akkor pedig tessék castolni, és aztán hasonlítgatni. Könnyebben kibukik, hogy a beadott PolyLine nem is ArrayList, amivel hasonlítani akarod.
Egyébként az equals, hashcode metódusokat egy IDE szépen ki is generálja neked, van rá menüpont.Szóval listát a listával:
public boolean equals(Object obj){
if (obj == this) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
PolyLine other = (PolyLine) obj;
return points.equals(other.points);
}Ha nem kellenek az ismétlődések, miért nem egy rendezett Setet használsz erre a célra? LinkedHashSet, vagy valami ilyesmi. Ő magától megcsinálja.
Pár megjegyzés:
- Osztályon belül felesleges gettereket használnod, simán lehet hivatkozni a field-ekre, pl.:return Math.sqrt(Math.pow(this.x - other.x, 2) + Math.pow(this.y - other.y, 2));
- Ha az objektum állapota nem változhat, akkor érdemes a field-eket final-ra állítani, így még véletlenül sem fogod tudni tönkretenni az objektumaidat. Továbbá egy ilyen tipikus value object esetén én még a getterek elhagyását is megkockáztatnám, valahogy így:
public class Point{
public final int x;
public final int y;
public Point(int x, int y){
this.x = x;
this.y= y;
}
public boolean equals(Object other){
// ...
}
public double getDistance(Point other){
// ...
}
public String toString(){
// ...
}
}- Ne félj interfészt használni, ahol lehet, könnyebben cserélgetheted majd mögötte az implementációt. Ha nem akarod cserélgetni, akkor sem árt, mert idővel rááll a kezed, és nem kell folyton törnöd az APIt egy kis módosítás miatt.
Erre gondolok:private ArrayList<Point> points = new ArrayList<Point>();
// helyett
private List<Point> points = new ArrayList<Point>();
// esetleg (attól függ, milyen funkcionalitást vársz el tőle, legyen-e rendezett, stb)
private Collection<Point> points = new ArrayList<Point>();- Ciklusban Stringeket konkatenálni + jellel nem szép dolog, brutálisan pazarló. Minden egyes konkatenáció egy újabb és egy újabb Stringet hoz létre, amit aztán a következő körben el is dob, mert csak átmenetileg volt rá szükség. StringBuilder javallott és annak append metódusa. Vaaagy használod a listák toString metódusát, mert van.
Ú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
- Autós topik
- OFF TOPIC 44 - Te mondd, hogy offtopic, a te hangod mélyebb!
- Építő/felújító topik
- Kertészet, mezőgazdaság topik
- Samsung Galaxy S23 Ultra - non plus ultra
- Samsung Galaxy XCover7 Pro - burokban született One UI
- exHWSW - Értünk mindenhez IS
- Apple iPhone 17 - alap
- Milyen program, ami...?
- További aktív témák...
- ROG Strix G713PV 17.3" QHD IPS Ryzen 9 7845HX RTX 4060 16GB 512GB NVMe gar
- Gamer PC-Számítógép! Csere-Beszámítás! R5 5500 / RTX 3060 12GB / 32GB DDR4 / 500GB SSD!
- ROG Flow X13 2-in-1 13.4" FHD+ IPS érintő Ryzen 9 6900HS RTX 3050 Ti 16GB 1TB NVMe ujjolv gar
- Samsung Galaxy A51 4/128GB, Normál, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- Apple iPhone 11 Pro Max 64GB, Akku: 100%, Normál, Kártyafüggetlen, Töltővel, 1 Év Garanciával!
- 152 - Lenovo LOQ (15IRH8) - Intel Core i5-12450H, RTX 4060
- BESZÁMÍTÁS! ASROCK B650M R5 7600X 32GB DDR5 1TB SSD RX 6900XT OCF 16GB Zalman Z1 PLUS CM 1200W
- GYÖNYÖRŰ iPhone SE 2020 128GB Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3291
- GYÖNYÖRŰ iPhone 12 mini 128GB Blue-1 ÉV GARANCIA - Kártyafüggetlen, MS3415 94% Akkumulátor
- iKing.Hu - OnePlus Nord 4 5G Fém unibody, 120 Hz AMOLED, 100W gyorstöltés 16/512 GB
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest