无法将comparator类转换为java。可比的
首先,我知道有些人已经问过类似的问题,但我不确定这是否与他们所问的相同
我有一个名为Vehicle
的类,它有一个名为location
的属性。另一方面,我有一个名为Road
的类,它具有车辆的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
接口吗?还是我错过了什么
提前谢谢
# 1 楼答案
您似乎正在将
null
传递给List.sort
,而不是您的Comparator
。在这种情况下,以及其他一些情况下,null
Comparator
被解释为意味着使用元素Comparable
接口