Класс не может быть приведен к java .lang.Comparable - PullRequest
2 голосов
/ 19 марта 2020

Прежде всего, я знаю, что некоторые люди уже задавали подобные вопросы, но я не уверен, что это то же самое, что они задавали.

У меня есть класс с именем Vehicle, который имеет атрибут с именем location. С другой стороны, у меня есть класс с именем Road, который имеет атрибут ArrayList транспортных средств. Я хочу упорядочить список с именем _vehicles, используя location, но в порядке убывания, поэтому я создал этот класс в классе Road:

class CompareVehicles implements Comparator<Vehicle> {

    @Override
    public int compare(Vehicle o1, Vehicle o2) {
        if (o1.getLocation() < o2.getLocation()) return 1;
        if (o1.getLocation() > o2.getLocation()) return -1;
        return 0;
    }
}

И атрибут с именем _vehicleComparator, который является его типом. CompareVehicles Но когда я выполняю метод _vehicles.sort(_vehicleComparator), я получаю эту ошибку:

java.lang.ClassCastException: class simulator.model.Vehicle cannot be cast to class java.lang.Comparable (simulator.model.Vehicle is in unnamed module of loader 'app'; java.lang.Comparable is in module java.base of loader 'bootstrap')
    at java.base/java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:320)
    at java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:188)
    at java.base/java.util.Arrays.sort(Arrays.java:1316)
    at java.base/java.util.Arrays.sort(Arrays.java:1510)
    at java.base/java.util.ArrayList.sort(ArrayList.java:1717)
    at simulator.model.Road.advance(Road.java:115)
    at simulator.model.TrafficSimulator.advance(TrafficSimulator.java:44)
    at simulator.control.Controller.run(Controller.java:54)
    at simulator.launcher.Main.startBatchMode(Main.java:136)
    at simulator.launcher.Main.start(Main.java:144)
    at simulator.launcher.Main.main(Main.java:156)

Должен ли Vehicle реализовать интерфейс Comparable, даже если я использую Comparator? Или я что-то упустил?

Заранее спасибо

1 Ответ

5 голосов
/ 19 марта 2020

Вы, кажется, передаете null в List.sort вместо вашего Comparator. В этом и некоторых других случаях null Comparator интерпретируется как значение, использующее интерфейс Comparable элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...