Java迭代器和泛型类型转换

Java迭代器和泛型类型转换,java,generics,casting,iterator,Java,Generics,Casting,Iterator,我有一个类VehicleFactory和一个扩展接口车辆的接口车辆 我使用VehicleFactory类中的车辆列表,但我只希望它返回车辆 具体来说,我希望它返回一个车辆迭代器,其中包含车辆列表中的实例 公共级车辆工厂(){ 私家车名单; (...) 公共迭代器车辆迭代器(){ return((List)(List您可能会做的事情) public Iterator<Vehicles> vehicleIterator() { return new ArrayList<Veh

我有一个类VehicleFactory和一个扩展接口车辆的接口车辆

我使用VehicleFactory类中的车辆列表,但我只希望它返回车辆

具体来说,我希望它返回一个车辆迭代器,其中包含车辆列表中的实例

公共级车辆工厂(){
私家车名单;
(...)
公共迭代器车辆迭代器(){
return((List)(List您可能会做的事情)

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();  }
   };
}
公共迭代器车辆迭代器(){
返回新的ArrayList(this.cars).iterator();
}
或者你也可以

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();  }
   };
}
公共迭代器车辆迭代器(){
返回Collections.unmodifiableList(this.cars).iterator();
}
或者你也可以

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 it=this.cars.Iterator();
公共布尔值hasNext(){返回它。hasNext();}
公共车辆next(){返回它。next();}
public void remove(){it.remove();}
};
}

或者你可以做你现在正在做的事情,这可能没问题,除非你将
迭代器
转换为
列表迭代器
,然后用
添加
设置

将汽车列为汽车的列表,而不是汽车?汽车有setter方法,我不想让其他类访问。假设汽车允许我拥有m方法,例如setColor(颜色newColor)我不希望其他类能够使用迭代器访问它。奇怪的是,答案被删除了。这是正确的。我不知道他为什么要删除它。我写了一篇评论,关于java文档如何明确指出应该避免使用通配符作为返回类型。你能解释一下为什么你认为其他答案比e当前实现?(我所说的答案没有强制转换,返回类型为“”)