转换实现Runnable的对象

时间:2014-11-05 04:23:40

标签: java multithreading

我有Car对象,它实现Runnable,如下所示

Car implements Runnable{
 int id; 
 public Car(int id) {
  id = this.id;
  }
  public boolean getIsAvailable() {
   return isAvailable;
  }
}

class CabService{
 static List<Thread> cars = new ArrayList<Thread>();
 public static void main(String[] args) {
  for(int i=0; i< 3; i++)
    {   
        cars.add(new Thread(new Car(i)));
    }
  }
}

在CarService课程中,我有如下车辆列表,并尝试迭代列表并将对象转换为Car,如下所示

    List<Car> availableCars = new ArrayList<Car>();
    List<Thread> cars = CabService.cars;    
    for(Thread carThread : cars) {
        Car car  = (Car)carThread;
        if(car.getIsAvailable())
            availableCars.add(car);
    }
    return availableCars;

当我尝试将carThread转换为car时,我收到编译错误Cannot cast from Thread to Car有人可以帮我解决此问题吗?

1 个答案:

答案 0 :(得分:2)

您的解决方案是将CabService.cars更改为List<Car>而不是List<Thread>。这样,就没有必要尝试错误的演员表,事实上不需要演员阵容。我还打赌你最好让这个变量不是一个静态字段,而是使它成为一个私有实例字段并用getter方法访问它。为什么这很重要?一个原因是,这允许您稍后将List设置为只读,不允许其他类通过使用getter传递深拷贝List来更改列表中的Cars。