使用可比较的接口对通用链接列表进行排序

问题描述 投票:-3回答:2

我想用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;
    }
}

但我得到一个错误,任何建议?

java generics linked-list comparable
2个回答
2
投票

您试图减去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
投票

在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); }
© www.soinside.com 2019 - 2024. All rights reserved.