0

我试图使用该接口通过使用自定义方法使用“arrivalTime”字段Comparable对对象数组列表进行排序,但它一直告诉我我不能,因为对象不是抽象的。我不能把它抽象化。我需要实例化对象.. CarcompareTo()CarCar

有谁知道它为什么要我把我的班级抽象化?

4

5 回答 5

2

您在类中的方法定义不正确。肯定是

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

由于该方法没有正确覆盖接口中的方法,IDE 要求您标记类抽象以避免编译错误。另一种选择是在类中正确实现抽象方法并消除错误。如果您使用 Eclipse,请在类上按 Ctrl + 1 并选择“添加未实现的方法”选项。

于 2012-10-23T20:03:18.927 回答
1

似乎是 IDE 迫使您在实现接口时使您的类抽象或定义compareTo方法。Comparable

于 2012-10-23T20:00:35.280 回答
0

你需要这样使用它:

public class Car implements Comparable<Car>{

    ...

    @Override
    public int compareTo(Car other) {
    ...
    }
}
于 2012-10-23T20:05:30.363 回答
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);

看看我关于排序的帖子。

于 2012-10-23T20:35:05.210 回答
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());
    }
}
于 2012-10-23T20:07:05.080 回答