MyClass не может быть приведен к java.lang.Comparable: java.lang.ClassCastException

Я делаю проект Java, и я получил эту проблему и не знаю, как ее исправить.

Занятия в моем проекте (упрощенно):

public class Item {

    private String itemID;
    private Integer price;

    public Integer getPrice() {

        return this.price;

    }

}

public class Store {

    private String storeID;
    private String address;

}

public class Stock {

    private Item item;
    private Store store;
    private Integer itemCount;

    public Integer getInventoryValue() {

        return this.item.getPrice() * this.itemCount;

    }  
}

Затем я пытаюсь сортировать ArrayList запаса, поэтому я создаю еще один класс под названием CompareByValue

public class CompareByValue implements Comparator<Stock> {

    @Override
    public int compare(Stock stock1, Stock stock2) {

        return (stock1.getInventoryValue() - stock2.getInventoryValue());

    }

}

Когда я пытаюсь запустить программу, она выдает ошибку:

Исключение в потоке "main" java.lang.ClassCastException: запас не может быть приведен к java.lang.Comparable

Кто-нибудь знает, что не так?

2 ответа

Это потому что Stock не реализует Comparable, Либо реализовать это:

public class Stock implements Comparable<Stock> {
    public int compareTo(Stock o) {
        // ...
    }
}

... или передать экземпляр CompareByValue в качестве параметра к sort() метод:

Collections.sort(list, new CompareByValue());

Только сверху код, выглядит нормально. Вы уверены, что исключение из приведенного выше кода? если вы просто поместите объект Stock в любую отсортированную коллекцию, вы увидите такое исключение и вам нужно будет реализовать интерфейс Comparable.

Но для случая, когда вы просто передаете свой пользовательский Comparator, вам не нужно делать Stock для сравнения. это тот же случай, как вы даете анонимную реализацию Comparator.

установите в компараторе отсортированную коллекцию, например TreeSet, а затем добавьте объект Stock в отсортированную коллекцию, он должен работать без реализации интерфейса Comparable.

public class Student implements Comparator<Student> {

                private String name;
                private String surname;
                private int matpaz;
                private int progrpaz;
                private int anglupaz;
                private double average;

            @Override
                public int compare(Student o1, Student o2) {

                    String v1 = o1.surname;
                    String v2 = o2.surname;

                    if ((v1.compareTo(v2)) >0) return 1;
                    else return 0;
                }


                public static void alphabetically (Student[] s)
                {
                    Arrays.sort(s); 
                    System.out.printf(Arrays.toString(s));
                } 
}
Другие вопросы по тегам