gpt4 book ai didi

java - 类无法转换为 java.lang.Comparable

转载 作者:行者123 更新时间:2023-12-01 23:23:31 27 4
gpt4 key购买 nike

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

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

提前谢谢

最佳答案

您似乎将 null 传递给 List.sort 而不是您的 Comparator。在本例和其他一些情况下,null Comparator 被解释为使用元素的 Comparable 接口(interface)。

关于java - 类无法转换为 java.lang.Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60758788/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com