クラスはjava.lang.Comparableとにキャストすることはできません

Awacate:

まず第一に、私が知っている何人かの人々は、既に同様の質問をしたが、これは、彼らが尋ねたものと同じである場合、私はわかりません。

私は名前のクラス持つVehicleという名前の属性を持っていますlocation他の側では、私が持っているというクラスRoad車のArrayListの属性を持ちます。私は名前のリストを注文したい_vehicles、使ってlocationますが降順で、私は道路クラスにこのクラスを作成しました:

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私はコンパレータを使用している場合でも、インタフェースを?または私は何かが足りないのですか?

前もって感謝します

トムホーティン - tackline:

あなたは合格しているように見えるnullList.sortあなたの代わりにComparatorこの場合、およびいくつかの他のものでは、null Comparator要素の使用を意味すると解釈されるComparableインタフェースを。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=318337&siteId=1