2012-10-23 40 views
0

我試着去使用Comparable接口排序使用「arrivalTime」字段Car對象的ArrayList,通過使用自定義compareTo()方法,但它一直告訴我,我不能因爲Car對象不是抽象的。我不能抽象。我需要實例化Car對象。IDE想要類是抽象相媲美

有誰知道爲什麼要我讓我的課程抽象?

+5

與郵政相關的代碼。 – kosa

回答

1

好像是IDE強迫你讓你的類抽象或定義compareTo方法,因爲你實現了Comparable接口。

2

您在類內的方法定義不正確。它必須是

@Override 
public int compareTo(Car o) 
{ 
    return 0; 
} 

由於該方法不會覆蓋一個在正確的接口,IDE會要求你將類標記抽象,以避免編譯錯誤。另一種選擇是正確地在類中實現抽象方法並擺脫錯誤。如果您使用eclipse,請在該類上按Ctrl + 1並選擇「添加未實現的方法」選項。

0

你需要使用這種方式:

public class Car implements Comparable<Car>{ 

    ... 

    @Override 
    public int compareTo(Car other) { 
    ... 
    } 
} 
0

這裏是一個工作(如果比較簡陋)例如:

public class Cars 
{ 
    static class Car 
    { 
     Date arrivalTime; 
     public Car(Date time) 
     { 
      arrivalTime = time; 
     } 
    } 

    static class CarComparator implements Comparator<Car> 
    { 
     @Override 
     public int compare(Car o1, Car o2) 
     { 
      return o1.arrivalTime.compareTo(o2.arrivalTime); 
     }  
    } 

    public static void main(String[] args) 
    { 
     List<Car> cars= new ArrayList<Car>(); 
     // create and add some cars here 
     Collections.sort(cars, new CarComparator()); 
    } 
} 
0

您應該使用Comparable接口這樣的:

public class Car implements Comparable<Car> { 

    private int arrivalTime; 

    public Car(int arrivalTime) { 
     this.arrivalTime = arrivalTime; 
    } 

    public int getArrivalTime() { 
     return this.arrivalTime; 
    } 

    @Override 
    public int compareTo(Car car) { 
     return this.arrivalTime - car.getArrivalTime(); 
    } 

} 

做實際的排序:

LinkedList<Car> cars = new LinkedList<Car>(); 
cars.add(new Car(20000)); 
cars.add(new Car(30000)); 
cars.add(new Car(40000)); 

Collections.sort(cars); 

看看我的帖子here關於排序。

相關問題