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