我有 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
有人可以帮我修复吗这个?
最佳答案
您的解决方案是将 CabService.cars 更改为 List<Car>
不是List<Thread>
。这样,就不需要尝试错误的转换,实际上也不需要转换。我还敢打赌,您最好不要将此变量设置为静态字段,而是将其设置为私有(private)实例字段并使用 getter 方法访问它。为什么这很重要?原因之一是,这允许您稍后通过让 getter 传递深拷贝列表来将列表设为只读,从而不允许其他类更改列表中的汽车。
关于java - 转换实现 Runnable 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26749665/