我尝试使用Comparable
接口使用“arrivalTime”字段对Car
个对象的arrayList进行排序,使用自定义compareTo()
方法,但它一直告诉我我不能,因为Car
对象不是抽象的。我不能把它抽象化。我需要实例化Car
对象..
有谁知道为什么要我让我的课抽象?
答案 0 :(得分:2)
您在类中的方法定义不正确。一定是
@Override
public int compareTo(Car o)
{
return 0;
}
由于该方法未正确覆盖接口中的方法,因此IDE要求您将类抽象标记为避免编译错误。另一种选择是正确地在类中实现抽象方法并消除错误。如果您使用eclipse,请在类上按Ctrl + 1并选择“添加未实现的方法”选项。
答案 1 :(得分:1)
似乎是IDLE迫使您在实现compareTo
接口时使您的类抽象或定义Comparable
方法。
答案 2 :(得分:0)
你需要这样使用它:
public class Car implements Comparable<Car>{
...
@Override
public int compareTo(Car other) {
...
}
}
答案 3 :(得分: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());
}
}
答案 4 :(得分: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。