java - 转换实现 Runnable 的对象

标签 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 有人可以帮我修复吗这个?

最佳答案

您的解决方案是将 CabService.cars 更改为 List<Car>不是List<Thread> 。这样,就不需要尝试错误的转换,实际上也不需要转换。我还敢打赌,您最好不要将此变量设置为静态字段,而是将其设置为私有(private)实例字段并使用 getter 方法访问它。为什么这很重要?原因之一是,这允许您稍后通过让 getter 传递深拷贝列表来将列表设为只读,从而不允许其他类更改列表中的汽车。

关于java - 转换实现 Runnable 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26749665/

相关文章:

Java:当从另一个类引用时,为我的框架定义的绘制方法不会调用 repaint()

ruby - Log4r 在 Rails 4 应用程序中实际上是线程安全的吗?

IOS 8.0.2 在套接字关闭时不发送 TCP FIN

java - 我可以用java为ubuntu编写一个拨号监听程序吗?

java - JavaDoc 中@see 的用法?

java - 结合setText使用方法(android studio)

c - Linux, C : Accumulate data from multiple threads

java - 如何在我的 View 中调用我的命名查询

java - 错误 POLICY_NAME_POPULATION

Java 线程在记录器上被阻止