2014-11-05 119 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。