我有一个类VehicleFactory和一个扩展界面Vehicle
的接口Car我使用VehicleFactory类中的Cars列表但我只希望它返回Vehicle
具体来说,我希望它返回包含汽车列表中存在的实例的车辆的迭代器
public class VehicleFactory() {
private List<Car> cars;
(...)
public Iterator<Vehicles> vehicleIterator() {
return ((List<Vehicles>)(List<? extends Vehicles>)this.cars).iterator();
}
}
是否有更好,更清洁的方法可以在不使用通配符的情况下完成上面编码的内容?
答案 0 :(得分:1)
你可能会......
public Iterator<Vehicles> vehicleIterator() {
return new ArrayList<Vehicles>(this.cars).iterator();
}
或者你可以......
public Iterator<Vehicles> vehicleIterator() {
return Collections.<Vehicles>unmodifiableList(this.cars).iterator();
}
或者你可以......
public Iterator<Vehicles> vehicleIterator() {
return new Iterator<Vehicles>() {
Iterator<Car> it = this.cars.iterator();
public boolean hasNext() { return it.hasNext(); }
public Vehicles next() { return it.next(); }
public void remove() { it.remove(); }
};
}
或者你可以做你现在正在做的事情,可能确定,除非你将Iterator
强制转换为ListIterator
并将add
放入其中}或set
。