2014-11-05 114 views
2

我有实现Runnable如下铸造对象实现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; 

当我尝试投了carThreadcar我得到的编译错误Cannot cast from Thread to Car有人能帮助我如何解决这一问题?

+3

线程是一个类,而不是一个接口。所以你扩展线程不实现 – Peshal 2014-11-05 04:28:03

+1

而'getIsAvailable()'不是'run()'。 – 2014-11-05 04:32:09

+1

'Runnable'与'Thread'不一样。 – immibis 2014-11-05 04:32:52

回答

2

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