IDE хочет, чтобы класс был абстрактным с Comparable

Я пытаюсь использовать интерфейс Comparable для сортировки массиваList объектов Car с использованием поля «arrivalTime» с помощью пользовательского метода compareTo(), но он продолжает говорить мне, что я не могу, потому что объект Car не является абстрактным. Я не могу иметь это абстрактно. Мне нужно создать экземпляры Car объектов..

Кто-нибудь знает, почему он хотел бы, чтобы я сделал свой класс абстрактным?


person user939287    schedule 23.10.2012    source источник


Ответы (5)


Ваше определение метода внутри класса неверно. Это должно быть

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

Поскольку метод неправильно переопределяет метод в интерфейсе, IDE просит вас пометить абстрактный класс, чтобы избежать ошибок компиляции. Другой вариант — правильно реализовать абстрактный метод в классе и избавиться от ошибок. Если вы используете eclipse, нажмите Ctrl + 1 в классе и выберите параметр «Добавить нереализованные методы».

person Deepak Bala    schedule 23.10.2012

Кажется, что IDE заставляет вас делать абстрактный класс или определять метод compareTo при реализации интерфейса Comparable.

person Subhrajyoti Majumder    schedule 23.10.2012

вам нужно использовать его следующим образом:

public class Car implements Comparable<Car>{

    ...

    @Override
    public int compareTo(Car other) {
    ...
    }
}
person rptmat57    schedule 23.10.2012

Вот рабочий (хотя и довольно грубый) пример:

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());
    }
}
person DNA    schedule 23.10.2012

Вы должны использовать интерфейс 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);

Взгляните на мой пост здесь о сортировке.

person Paulius Matulionis    schedule 23.10.2012