类不能强制转换为java.lang.Compariable

类不能强制转换为java.lang.Compariable,java,comparator,Java,Comparator,首先,我知道有些人已经问过类似的问题,但我不确定这是否与他们所问的相同 我有一个名为Vehicle的类,它有一个名为location的属性。另一方面,我有一个名为Road的类,它具有车辆的ArrayList属性。我想使用位置对名为\u vehicles的列表进行排序,但顺序是降序的,因此我将该类创建到Road类中: class CompareVehicles implements Comparator<Vehicle> { @Override public int

首先,我知道有些人已经问过类似的问题,但我不确定这是否与他们所问的相同

我有一个名为
Vehicle
的类,它有一个名为
location
的属性。另一方面,我有一个名为
Road
的类,它具有车辆的ArrayList属性。我想使用
位置
对名为
\u vehicles
的列表进行排序,但顺序是降序的,因此我将该类创建到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;
    }
}
Vehicle
是否应该实现
Comparable
接口,即使我使用的是比较器?还是我遗漏了什么


提前感谢您

您似乎正在将
null
传递给
列表。请对
进行排序,而不是将
比较器
排序。在这种情况下,以及其他一些情况下,
null
比较器
被解释为意味着使用元素的
可比接口。

比较器与可比接口不同。
\u vehicleComparator
初始化了吗?是的,我刚刚忘记初始化它,谢谢!(还有一个问题:CompareHicles应该创建到Road类中还是在Road类之外,但在同一个文件中?@awatate我可能会使
车辆
具有可比性
)。我不太喜欢嵌套类。不赞成在同一文件中使用多个顶级类。如果我坚持使用
Comparator
,我可能会选择一个
publicstaticfinal
(所有这些)字段,将实现作为lambda函数。
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)