繁体   English   中英

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

[英]Class cannot be cast to java.lang.Comparable

首先,我知道有些人已经问过类似的问题,但我不确定这是否和他们问的一样。

我有一个名为Vehicle的类,它有一个名为location的属性。 另一方面,我有一个名为Road的类,它有一个 Vehicles 的 ArrayList 属性。 我想使用location但按降序对名为_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;
    }
}

还有一个名为_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接口? 或者我错过了什么?

先感谢您

您似乎将null传递给List.sort而不是您的Comparator 在这种情况下和其他一些情况下, null Comparator被解释为意味着使用元素的Comparable接口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM