Tyre.java:
public class Tyre { private int size; Tyre(int s) { size = s; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } }
Car.java:
import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Car { private List<Tyre> tires = new ArrayList<Tyre>(); public void setTires(List<Tyre> tires) { this.tires.clear(); this.tires.addAll(tires); } public void addTire(Tyre tire) { this.tires.add(tire); } public List<Tyre> getTires() { return Collections.unmodifiableList(tires); } }
CarTest.java:
import java.util.List; public class CarTest { /** * Question: what will be the output? */ 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.setTires(carTires); System.out.println("After (1): " + car.getTires().size()); System.out.println("After (2): " + carTires.size()); } }
Kérdés: Mi lesz a kimenete a programnak?
2,0,0
VálaszTörléspublic void setTires(List tires) {
this.tires.clear();
this.tires.addAll(tires);
}
a clear()-el a tire is ürítve lett...
így az addall(tires) már nincs mit hozzáadjon
Kicsit pontosítva: a clear()-el a paraméterként kapott "List tires" is ürítve lett, mivel az az eredeti this.tires-ra hivatkozik.
TörlésNem értek egyet! A this.tires.clear() az instance változójár(listáját) tette üressé, majd a paraméterként kapott listával újra tölti. Valójában a clear()-re és az add-ra se lenne szükség. Pusztán egyenlővé kéne tenni a kapot paraméterrel --> this.tires = tires;
TörlésA Car osztályban, a getTires()-ből hiányzik a List-ré castolás.
TörlésMikor próbálom futtatni, az alábbi hibaüzenetet kapom:
Törlésjava.lang.ClassCastException: java.util.Collections$UnmodifiableCollection cannot be cast to java.util.List
at car.Car.getTires(Car.java:20)
at car.CarTest.main(CarTest.java:11)
Ezt a megjegyzést eltávolította a szerző.
VálaszTörlésEzt a megjegyzést eltávolította a szerző.
VálaszTörlés