Hirdetés
Új hozzászólás Aktív témák
-
TBG
senior tag
Az egészet nem értem egyébként.
Car car = new Car();
car.addTire(new Tyre(10));
car.addTire(new Tyre(11));Ez a 3 sor megcsinálja azt, amit itt szeretnél tenni...
List<Tyre> carTires = car.getTires();
System.out.println("Before: " + carTires.size());
car.setTires(carTires);Gondolom, azt vártad, hogy lesz egy 4 elemű listád [10,11,10,11] értékekkel? Vagy mi volt az elképzelés?
Egyébként így működött volna:public class Car {
private List<Tyre> tires = new ArrayList<Tyre>();
public void setTires(List<Tyre> t) {
this.tires.clear();
this.tires.addAll(t);
}
// Egyéb lekérdező metódusok
}
public class CarTest {
public static void main(String[] args) {
Car car = new Car();
car.addTire(new Tyre(10));
car.addTire(new Tyre(11));
List<Tyre> carTires = car.getTires();
System.out.println("Before: " + carTires.size());
Car anotherCar = new Car();
anotherCar.setTires(carTires);
System.out.println("After (1): " + car.getTires().size());
System.out.println("After (2): " + anotherCarTires.size());
} -
WonderCSabo
félisten
A Java mindenhol referenciákat használ (kivéve a primitív típusokat, de itt most nincs olyan). Feltételezem a car.getTires() fv. car.tires listát adja vissza. Mivel referenciákról van szó, ekkor a main lokális változója, a carTires illetve a car.tires mező ugyanarra az objektumra fog mutatni. Ezután átadod a car.setTires(carTires) - el a carTirest, ami törli a belső saját listát. De a carTires is a belső listára mutat, tehát ugyanazt a listát törlöd ki! Ezután hozzáadod a belső listához ugyannak a már üres listának az elemeit, nyilván továbbra is üres marad.
Ez egy ismert jelenség, és direkt kitaláltak rá olyan mintákat, amivel ezt el lehet kerülni. Az egyik ilyen megoldás a defensive copy.
Új hozzászólás Aktív témák
A topicot kiemeltem. Valaki nem akar egy nyitó hsz-t írni?:))
- Felrobbant a Pixel Fold Zack Nelson kezében
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Milyen autót vegyek?
- AliExpress tapasztalatok
- Elektromos cigaretta 🔞
- WLAN, WiFi, vezeték nélküli hálózat
- LEGO klub
- Genshin Impact (PC, PS4, Android, iOS)
- Wise (ex-TransferWise)
- Megérkeztek a Xiaomi 15T sorozatának telefonjai Magyarországra
- További aktív témák...
- KERESEK Xbox 360 Hibás Játék Lemezeket
- Eladó Bowers & Wilkins PX8 Tan fejhallgató.
- Apple iPhone 15 Pro 128GB, Kártyafüggetlen, 1 Év Garanciával
- HP Z-Book G3 ! Csere-Beszámítás! I7 6820HQ / Nvidia Quadro M1000M 2GB / 16Gb DDR4 ! Új Akksi!
- Latitude 5350 13.3" FHD IPS Ultra 5 125U 16GB 512GB NVMe ujjlolv IR kam gar
- Bomba ár! Dell Latitude 5490 - i5-8GEN I 16GB I 256GB SSD I 14" FHD I HDMI I Cam I W10 I Gari!
- Több mint 70.000 eladott szoftverlicenc
- BESZÁMÍTÁS! ASRock B450M R5 2600 16GB DDR4 256GB SSD 1TB HDD GTX 1650 4GB Zalman T4 PLUS 400W
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! Honor 200 Lite, Honor 200, Honor 200 Pro, Honor 200 Smart
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest