Используйте сопоставимый интерфейс для сортировки общего связанного списка - PullRequest
0 голосов
/ 19 марта 2019

Я хочу отсортировать свой самостоятельно реализованный связанный список, используя сопоставимый интерфейс с Java. Мне нужно реализовать метод CompareTo: Вот код для моего класса ListElement:

 public class ListElement implements Comparable<ListElement> {
    public Object wert;
    public ListElement nachFolger;

    public ListElement(Object wert , ListElement nachFolger) {
        this.wert=wert;
        this.nachFolger=nachFolger;
    }

    @Override
    public int compareTo(ListElement a) {
        if(this.nachFolger.wert - a.wert) {
            return 1;
        }
        return 0;
    }
}

Но я получаю ошибку,какие-нибудь рекомендации?

Ответы [ 2 ]

2 голосов
/ 19 марта 2019

Вы пытаетесь вычесть ссылки типа Object.

Ваш тип элемента должен реализовывать Comparable:

public class ListElement<T extends Comparable<T>> implements Comparable<ListElement<T>> {
    public T wert;
    public ListElement<T> nachFolger;

    public ListElement(T wert, ListElement<T> nachFolger) {
        this.wert=wert;
        this.nachFolger=nachFolger;
    }

    @Override
    public int compareTo(ListElement<T> a) {
        return wert.compareTo(a.wert);
    }
}
0 голосов
/ 19 марта 2019

В Java операция вычитания применяется только к числовым литералам (и автоматически распакованным числовым объектам).Когда вы пытаетесь использовать его для нечислового типа Object, вы получаете сообщение об ошибке.Если вы хотите сравнить два wert значения, вы можете сделать следующее:

  • Измените тип на number с Object, чтобы вы могли сравнивать, например:

    public Object wert;
    
    @Override
    public int compareTo(ListElement a) {
        return wert.compareTo(a.wert);
    }
    
  • Измените тип на Comparable, чтобы вы могли использовать compareTo на двух wert объектах

    public Comparable wert;
    
    @Override
    public int compareTo(ListElement a) {
        return wert.compareTo(a.wert);
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...