Hirdetés
- iPhone topik
- MWC 2026: Farsangra Galaxy Ultrának öltözött a gyerek
- Honor Magic8 Pro - bevált recept kölcsönvett hozzávalókkal
- Xiaomi 15T Pro - a téma nincs lezárva
- Garmin Forerunner 255 Music - nem csak futóknak
- Kezünkben a OnePlus 15 és az Oppo Find X9-ek
- Samsung Galaxy S25 Ultra - titán keret, acélos teljesítmény
- One mobilszolgáltatások
- Xiaomi 17 Ultra - jó az optikája
- Samsung Galaxy Watch8 és Watch8 Classic – lelkes hiperaktivitás
Új hozzászólás Aktív témák
-
disy68
aktív tag
válasz
#74220800
#9096
üzenetére
Az equals függvényt hashCode nélkül nem írjuk felül (és amikor felülírjuk használjuk az @Override annotációt)! Mindkét függvény az Object osztályból jön, ami minden osztály őse. Olvasnivaló a témához.
-
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?:))
- Milyen monitort vegyek?
- One otthoni szolgáltatások (TV, internet, telefon)
- WoW avagy World of Warcraft -=MMORPG=-
- Energiaital topic
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Microsoft Office és Office 365 topic
- iPhone topik
- A fociról könnyedén, egy baráti társaságban
- MWC 2026: Farsangra Galaxy Ultrának öltözött a gyerek
- Debrecen és környéke adok-veszek-beszélgetek
- További aktív témák...
- Lenovo ThinkPad X1 Carbon Gen 10 i5-1245U / 16GB RAM / 512GB NVMe SSD / 1920 1200 / EU billentyűzet
- Lenovo ThinkPad X1 Carbon Gen 7 i5-8365U / 8GB RAM / 256GB NVMe SSD / 14" FHD / 12 hónap garancia
- Lenovo ThinkPad X1 Carbon Gen 9 i5-1145G7 / 16GB RAM / 256GB NVMe SSD / 14" WUXGA / 12 hónap garanci
- Gtx 1080/ Intel I7 8700K/ 16GB Ram/ 256GB M2 SSD/ 1TB HDD/ Win11
- Gtx 1050Ti/ Intel I5 7500/ 16GB Ram/ 256GB Sata SSD/ 1.5TB HDD/ Win11
- Lenovo IdeaPad Slim 3 Ryzen 7 8840HS 15" FHD+ 24GB 1000GB Teljeskörű garancia
- Xiaomi 13T Pro 512GB, Kártyafüggetlen, 1 Év Garanciával
- BESZÁMÍTÁS! Intel Core i5 9400F 6 mag 6 szál processzor garanciával hibátlan működéssel
- Telefon felváráslás!! Xiaomi 13T, Xiaomi 13T Pro, Xiaomi 14T, Xiaomi 14T Pro
- HIBÁTLAN iPhone 11 64GB Red -1 ÉV GARANCIA - Kártyafüggetlen, MS4388
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest


