Java迭代器和泛型类型转换

时间:2014-11-24 01:45:53

标签: java generics casting iterator

我有一个类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();
    }

}

是否有更好,更清洁的方法可以在不使用通配符的情况下完成上面编码的内容?

1 个答案:

答案 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