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